My project only has one GameMode, and its main purpose is to be a container that sets all the other gameplay-critical stuff like which GameState Class, default Playercontroller etc. although it does handle a few things for managing players, starting stuff on levels etc.
This is largely
because my project is a multiplayer only game so Gamestate is doing most of what you would use GameMode for but in a multiplayer scenario.
My menus stand alone. I have a level mainly for menus to setup the game options but i also have some of these same menu widgets pop up during gameplay on other levels. It is the Viewport, not the level which contains them, unless youre using 3D widget actor components (those exist in the level). But even those dont have to be tied to the level, you can just spawn, show/hide, enable/disable or destroy them at will regardess of what level or how you are using them.