It looks like you came up with a solution that is very, very similar to what I did here:
http://forum.arcadecontrols.com/index.php/topic,156300.0.html
I wrote software to run on my (real) skeeball machine I threw a computer and monitor into.
I have a GameScreen class that inherits from DrawableGameComponent, and handles the main update and draw methods and implements keyboard handling. From there, I created a SkeeballGame class that inherits GameScreen implements a bunch of common functionality. (highscore handling, common fonts and textures, highscore display, attract mode settings per game, etc). Each of my games inherits form this.
My base Game class is just a screen manager. My Title screen, menu, and my individual mini games are each GameScreen components that are dynamically loaded and unloaded.