Is there any way to have certain apps automatically turn on GPS when they launch (or at least prompt me if I want to)?
For example, if I use voice commands to ask for navigation directions, and GPS is not turned on, I'd like for it to enable GPS instead of guessing from cell towers. Bonus points if it turns it back off when I close the app.
Take a look at Tasker. It pretty much allows you to automate and set rules for everything on your phone based on times of the day, what apps you are using, your location... You can set a profile to automatically turn your GPS on or off based on almost any condition you can imagine.
Even if you do have GPS enabled it's only used when you are using an application that is actually requiring GPS location services.
So the best way to get your apps to use GPS location is turning on GPS by default.
If you don't want to pay for Tasker or Locale, you can use AutomateIt, which is free and has the same idea, though it offers much fewer triggers and actions, it does allow you to enable or disable the GPS when you start or end an app.
Note that turning on the GPS programmatically seems to be impossible without rooting your device after 2.3 (according to the AutomateIt description).
You can use the "Auto-Enable GPS for Maps" application, which switches both WiFi and GPS on when you launch Maps, Navigation, Local or Latitude, and restores them to their old state (e.g. switched off) when you quit these apps.
I published a GitHub entry for the GPSToggler quite some time ago.
To enable/disable GPS you need root. Period.
Some antivirus and automatic system backup applications conflict with the GPSToggler. I'm investigating this problem.