This may not be completly accurate, but I'll try. As far as I know things will improve for 3rd party developers once the software goes beyond 1.0. Ok:
1. The only way to start it is by using init. Depending on the program, it may be easier to rename the old init, and have the new one do what you need then start the old one when it's done. (My unit currently displays a custom logo and plays a startup sound before loading the player)
2. This I'm not exactly sure on, the player controls this and not much info on the player program exists. There is code on the developer site to change the source though as well.
3. Everything seen on the display and every key press on the front or via the remote is done via the player. (Well, once the player loads anyhow).
4. Easiest way for now would be to grab some of the code from the developer site, and make a program that runs before the player. This program should be able to grab the inputs before the player, and pass on anything it dosen't deal with.
5. Again, the player controls everything, even when the source is changed.
6. This is something I have a feeling one of the programmers will have to answer, as I haven't found a way, and I don't believe anyone else has.
Hopefully this will help some. The useful info will come when the programmers don't have to worry about implementing 1.0 features or killing show stopping bugs.
My empeg site is:http://24.236.3.131/empeg/