If you want to propose an algorithm to auto-deny some undo requests, feel free to do so. But it has to be a pretty concrete algorithm before I can even consider implementing it... not just "a limit on what undos can do". And my gut feeling is that defining a good algorithm here is an impossible task.
As jsh noted, the key thing is new information. IRL if someone has no new information I always let them undo, and if they have new information I rarely do. Sometimes they are all, oh I was going to play Village first, I had it in my hand, and well I'm not made of stone.
I think it's fine if the system is made of stone, for rated games. I would automatically allow undos with no new information, and automatically reject other ones. For unrated games I would let you ask for more generosity like you can now.
The stingy version of "no new information" is, you haven't accessed your deck or uncovered a Knight/Ruins, and the other player hasn't done anything or been given the option to do something. The generous more-programming version is the same except you track how many known cards there are for each player on each deck, and accessing those doesn't count against you.