The game really needs to (eventually) implement no-ask undos for instances when no new information has been revealed.
I was going to suggest just that earlier. I would specify, though, that a no-ask undo should be allowed for instances when no new information has been revealed
to the person seeking to undo. For example, if I play Poacher and don't realize a pile is empty, I might click on a card attempting to play it and end up discarding it. New information has been revealed (my opponent sees the card I discarded), but I should still be able to roll back to the point of the discard decision (but not to before I played Poacher) without needing consent from my opponent.
I'll also point out that it would even be possible for the server to defer updating your opponents' clients about the results of a string of your decisions while you're within the "no-refusal undo window" (or until it needs input from other players). Using the same Poacher example, the server wouldn't even need to update my opponent in real time about the identity of the card I discarded, or even the fact that I discarded anything yet, because it would still be within the "no-refusal undo window." As soon as I, say, play a cantrip and draw a card, then I can no longer get a no-refusal undo, so the server should make sure the opponent sees the discard and the new event at that time. But that would prevent the situation of watching your opponent play out a sequence of non-information-gaining actions only to go back and undo them and then you being confused about what happened and what didn't. I'm not sure if that's a desirable feature, but it should be possible.