Referring specifically to the choice of whether to use
DECLARE EXIT HANDLER FOR SQLEXCEPTION. If you use it, you swallow errors and there doesn't seem to be any way to access them programmatically, at least up to 5.5. If you don't use it, you leak transactions, and drivers such as JDBC auto-commit them instead of aborting them.
What gives? This sounds... awful.