While the stoic nature of working with out an undo key has been claimed as a great character builder for Blender users, we have to admit that we all make mistakes. Blender 2.30 has integrated Alexander Ewering's (intrr) editmesh undo code. (And future releases may see this implimented for other edit modes.)
Mesh undo works in the background saving copies of your mesh in memory as you make changes. (Developers of new features to Blender should know that it is required to actively "push" a copy of the mesh into the undo buffer before making changes. See undo_push_mesh() comments for details.)
Key features of Undo:
Pressing the U-Key in mesh editmode reverts to previous saved mesh, undoing the previous edit operation.
Undo operations are only stored for one mesh at a time. You can leave and re-enter editmode for the same mesh without losing any undo information, but once another mesh is edited, the undo information for the first is gone.
Pressing ALT-U brings up the undo menu. This lists all the undo steps by name so you can quickly find your way back to a known good spot in your work.
The ALT-U menu also contains the option "All Changes". This option is the equivilent of the old U Key, and will reload the mesh data as it was at the beginning of your edit session even if you have used up all your undo steps (See below).
Edit undo can be memory intensive. A mesh of 64K faces and verts can use over 3M of RAM per undo step. In case you are on a machine that is strapped for RAM, there is a user preference, under Edit methods, for determining the maximum number of undo steps saved. The allowed range is 1-64. The default is 32.