Why drush needs a stage server
There are a number of scenarios where having dev, stage and live are useful.

Example:  minor updates.


Run drush pm-update on dev, test and make sure everything is okay.
Push your code to stage / test, run drush updatedb, and make sure everything is still okay.
Push your code to live, run drush updatedb, and confirm everything is still okay.


The point here is that the operation of 1. and 2. are slightly different; by testing your deployment on the stage server before bringing it live, you can confirm that the deploy will go okay (i.e. there are no uncommitted components on the dev machine, or all state needed for a successful deploy is part of the deployment process.)  If you did not test this, then you'd break the live site if you forgot to commit an important file, or otherwise did not faithfully update the components used in deployment.