But won't people end up with all their apps running at the same time eventually? Of course there will only be a couple of services per app that actually "run", but still, that takes up battery life.
Good questions. I've coded a small GPS tracker app which registers with the OS to be able to run in the background, and indeed if I hit the home button and/or lock the iPhone, the app keeps tracking GPS data - forever. This basically means that if a developer adds backgrounding functionality to his app, he has to add a button or switch which will allow the user to choose if he wants the app to run in the background. Skype already has a switch which allows you to "stay online" when the device is locked. A similar switch would be needed for all apps that do something in the background.
When a GPS app is running in the background, the iPhone actually displays a little compass needle in the status bar, so you know that it's still tracking your position. When audio is playing in the background, it's obvious what's going on and for all other cases you could either display an alert to the user after say 15 minutes or as I said you need a switch.