First reason, the GPS can reduce power consumption if the GPS is turned off, however if the GPS is turned off and the user moves too far away, the GPS will have to redo a lot of initialization calculations (which can take about 5 minutes in typical GPS device, though can be slightly faster if the device knows an approximate location or if it does not need to be too accurate), this initialization wastes a lot of power and so Android usually keeps the GPS turned on for a while. The GPS driver uses those parameters to make decisions whether to turn off GPS or keeping it turned on will be much more economical.
Second reason, poorly written applications are much more difficult to write with how Android's GPS API is. If the GPS driver simply fired callbacks as fast as it can, then poorly written software can just process as much as it can, instead of filtering only those that it needs. Also, this kind of API forces programmer to explicitly think about their frequency and accuracy requirement, and allow the driver to better manage power vs accuracy tradeoff.
In many cases, in areas with high cell tower density, Android might decide to simply use network location and on other places to use GPS when the network location is unreliable. All that can be done transparently to application programmers.