Not sure with the undo issue. But if you're monitoring what object
is_updated or is_updated_data with a scene update handler you can do it
like this: maintain a list of "updating objects" and only sync the
objects/data when they fall off the is_updated list.
About a moth ago someone has suggested a patch which adds an access to
bpy.ops.ed.undo_history menu items from python:
https://lists.blender.org/pipermail/bf-committers/2016-November/047868.html
There seemed to be no response from the main developers, unfortunately.
You can, in principle, get a