I see, so "UNDO, THROW e" will throw an exception, but also run the undo logic for the current block. Considering that normally an error will also initiate an undo of the block, using the UNDO statement seems pretty logical and safe to me.
Especially considering our programming practice is to always declare variables as NO-UNDO so they wouldn't be affected anyway.