“Undo” functionality have nothing to do with presentation layer architecture — it can be implemented in any of the many MVx approaches and, even, in the classical Android spaghetti approach (all code inside Activities/Fragments).
In addition, the ability to undo user’s action doesn’t require Rx, Kotlin, Redux, DataBinding, etc.
What it does require is understanding of architecture and design of event based systems. The key to “undo” functionality is that you model each state change as an event, and the entire system (including backend) is event driven.
Only then you can “undo” individual user’s actions, including the actions that might have been already uploaded to the server.
And yes, it is extremely difficult to implement in practice.