Awen, it sounds like you have put a great deal of thought into the emulators section. Everything you have suggested so far seems great. Some of my ideas will add to that while others concern "programs" or "games" as opposed to "emulators"
First let me apologize as my coding skills are meager. So, if I suggest something that is impossible/impractical/plain silly please forgive me
As I see it the main concern with adding any of these features (games, programs, emulators) is seamless integration into xbmc. The launcher program, though very useful, breaks the "magic" of xbmc by launching everything in a new window. The user then sees the desktop and xbmc windowed showing that really these are two completely separate programs. The xbmc experience SHOULD give the illusion xbmc is an all inclusive program. You should never feel as if you are "leaving" xbmc. As you mentioned Awen of making a "game museum" arcade type machine, it would break the illusion of this ultimate gaming machine to see the computer desktop every time you start a new game.
The first big step would be to make all programs start "inside" xbmc. By this I mean that they do not launch an external window and would still be subject to the rules/controls of xbmc. Awen, if you have not tried the linksbrowser integration you should. It actually was quite well thought out. If I remember correctly, I think you could do the following with links browser.
Each program when launched should act the same as the movies or music section of xbmc. If you launch firefox you should be able to browse to any web page you like, then toggle back to xbmc's main menu while firefox continues to run. You could start some music, then toggle back to firefox and browse while listening to music. Then you should have an easy way of killing the program to return to the programs section. Launching a new program while another program is running should kill the first program before starting the next just like with movies and music. It will save system resources too to not have multiple programs running behind the scenes because you toggled away from them instead of actually killing them. There may be an exception to this rule which I will explain later.
Now that we have established the basics of how a program will run under xbmc, we come to what I consider the tricky part. Since there are many different types of programs from games to instant messengers that xbmc users might use we need to consider that fact that some of these programs use a considerable amount of buttons. Some of which might conflict with xbmc's current button mappings. For example "Tab" toggles the screen when playing a movie. However, in firefox it would be quite annoying if every time you tried to tab down to the next box it toggled the screen. See the issue?
My solution is to have settings for each program similar to plugin settings or some of the settings in the launcher plugin. These settings would be established each time a new program is added. We could either have a drop down that would give templates of common program types ie common settings for web browsers, games, other etc etc. Or just a list of what we consider to be the most common settings that would apply to any type of program.
For the above example of firefox there could be a setting labled "use alternate buttons." If this setting was checked then once a program was launched you would either:
A) use ctrl+tab or shift+tab (or whatever seems more logical, any combo would work) to toggle the screen and tab alone would still function the same as it normally would in programs. The same would apply for bringing up the player controls if music is playing etc etc.
B) use another very uncommon combination of buttons to bring up a pop-up menu that gives the option to toggle screen, quit program, bring up music controls, etc etc. If we decided something like this would be preferable then it might be just the default for all programs instead of a check box in program settings.
Another option that would be handy to have in program settings would be "enable mouse." Many programs do not need a mouse, emulators for example. I have my xbmc set to have the mouse disabled so that it doesn't get bumped and send my wrap lists spiraling out of control. However, a web-browser or newer games would require a mouse. Not really sure if that is something that would just appear when the program is launched or if it is something that xbmc would regulate. Just wanted to point it out. If we decided to go with option B from above for using a pop-up menu in programs for xbmc controls you might also integrate that in with the mouse, ie mousing over the bottom right hand corner of the screen brings up the pop-up. Again, this one is up for debate.
As I mentioned before, it would be nice to have music playing while answering emails or using an IM. However, if you are playing a video game with sound it would be a conflict of interest. A setting to "Enable XBMC Sounds" would be useful allowing you to continue listening to music when your program starts. Another option to consider along the same lines would be "Enable Program Sounds in XBMC." This would be a great option for an instant messenger. That way you could start your IM client and be doing other things. Then you would still be notified if you have a message.
Speaking of IM's, I know there has been mention of integrating one into xbmc. While it is a cool idea, it might also be like re-inventing the wheel. There are already quite a few really functional clients out there. If you could implement it as I have described above I don't see a need to spend the time and add the bloat to xbmc. The IM would be an example of a program that could have an option to "run as service" or something of that nature. Ie if you start it, it will continue to run even you start another program. You would then have to just click on it again to bring up it's gui. I could see this being handy for torrent clients as well. The only other issue I see with using a pre-existing IM client instead of an integrated client is that if you are watching a movie or listening to music it would be annoying to have a constant beep when a message arrives, but might also be annoying to miss an important message. A setting to "silence notifications during playback" would be perfect. That way if you are listening to music or watching a movie instead of a sound you could get a nice pop-up that you have a message. This might be trickier than it sounds from a coding standpoint since the IM client would not be a part of XBMC. It would have to have some way of knowing when a new message arrives. I will leave that to someone who is far better at coding than I am
So, these are the issues I see so far with adding programs to xbmc. Many programs will need different settings to make them functional without loosing the xbmc experience. I am sure there are a few other settings that might be helpful that I haven't thought of. Can anyone else think of any probable issues/conflicts I might be missing? As always these, are just thoughts. If you see merit in them, great! If not, I am more than happy to hear why. Sorry to have written a novel. Thank you to anyone who actually reads all this