As mentioned on the Blender wiki page on undo, there is the User level of undo, and the System level.
User level:
Expanding on the existing answers, You can configure the number of undo steps in User Preferences > Editing:

or Preferences > System > Memory & Limits in 2.8:

However, this value is arbitrarily limited to 64 256, or the Memory limit value. In other words, Steps is the maximum possible amount of undo steps, no matter what the Memory limit is set at.
Note that edit mode undo steps and object mode undo steps are stored separately, so you can have 256 edit mode undo steps and simultaneously have 256 object mode undo steps. (if you have enough memory)
System level:
You could use blenders autosave features to do something like zeffi suggested automatically.
Save on Quit
The function Save on Quit is enabled by default in Blender. Blender will always save your files when you quit the application
under normal operation.
Save Versions
This option tells Blender to keep the indicated number of saved versions of your file in your current working directory when you
manually save a file. These files will have the extension: .blend1,
.blend2, etc., with the number increasing to the number of versions
you specify. Older files will be named with a higher number. e.g. With
the default setting of 2, you will have three versions of your file:
*.blend (your last save), *.blend1 (your second last save) and *.blend2 (your third last save).
Auto Save Temporary Files
Checking this box tells Blender to automatically save a backup copy of your work-in-progress to the Temp directory (refer to the File
panel in the User Preferences window for its location). This will also
enable the Timer(mins) control which specifies the number of minutes
between each Auto Save. The default value of the Blender installation
is 5 (5 minutes). The minimum is 1, and the Maximum is 60 (Save at
every one hour).The Auto Saved files are named using a random number
and have a .blend extension.
Settings are in User preferences > File:

Or Preferences > Save & Load in 2.8:

I personally use a combination of automated saving and manual saving, and always save or at least duplicate the object when doing something destructive such as applying a modifier.
Images are from the wiki