Reduce the number of places aware that the root element can be replaced

Replacing the root element is currently a by-product of the undo impl. Reducing the number of places aware of this impl detail helps ensure future undo managers have less clean-up work to do when this behaviour is finally removed.

# Local testing done
* Undo/redo, and ensured text input + mouse selection still works
* Ensure multiple steps can be undone & redone