It's a simpler copy of what Java Mobile (J2ME) devices have had since 2002: a push registry.
Under Java an application registers for a type of incoming connection, or even an onboard timer event. When a push message arrives or a timer fires, the registered application will be either started, or woken up if just sleeping.
AFAIK, on the iPhone the push notification simply shows a sound, message and/or badge... and it's up to the user to start the app. (There are no timer events on iPhone.)
What it's good for:
It's good for any apps that would normally expect INCOMING information from a server. Like IM, or mail, news alerts, or even a shared game.
What it's not so good for:
For normal background apps, like voice navigation while you're on the phone, it's useless because that kind of app doesn't normally expect a server to tell the phone where it is. (Other phones keep navigating while you're doing something else.)
Other phones have background apps that watch your GPS location and change your ringer profile, or alert your friends / kids that you're close. The iPhone can't do that in the background for you.
Why it's a poor replacement for timer tasks
My favorite example is an app that wakes up and shows you a picture of the pill you should be taking (which would normally be done by an onboard timer).
Yes, you _could_ register with a server and have it push a notification down. Of course, if you're out of server contact, as you'd be on an airplane, the app is useless.
Who pays for the server?
And all of these assume the app programmer has the desire to maintain or pay for servers to begin with. Perhaps Apple is trying to figure out a way to host apps as well... for a price no doubt.