Including a custom options page causes “Pages” to disappear from dashboard menu

Look at the last argument to add_menu_page()$position.

$position
(integer) (optional) The position in the menu order this menu should appear. By default, if this parameter is omitted, the menu will
appear at the bottom of the menu structure. The higher the number, the
lower its position in the menu. WARNING: if two menu items use the
same position attribute, one of the items may be overwritten so that
only one item displays! Risk of conflict can be reduced by using
decimal instead of integer values, e.g. 63.3 instead of 63 (Note: Use
quotes in code, IE ‘63.3’).

The position identifier you have chosen– 20– is the position of the “Pages” menu, which is therefore being overwritten.

Use 20.1 or similar as suggested by the Codex. At the very least, use an integer that isn’t part of Core.