The undo/redo architecture at the MRML level should work fine, but sometimes the GUI/Logic levels get out of sync. See more info here You can pretty easily experiment with it to see how well it works for specific uses.
Another option is to auto-save the whole mrml scene periodically. If the bulk data has not changed this can be a very quick operation and allow you to reset to a known state easily.