His language was bad, but I don't blame him for being upset by your arbitrary undo rules.
Yeah, but don't try to shift the blame on the OP. Nobody is entitled to undoes.
And abusive language should never be justified, regardless of circumstances.
It's already really awkward to negate undoes, making it extra awkward by placing blame on the refusing player can only make the atmosphere worse.
This is why I think there should be some degree of automation in granting or refusing undoes.
No new information revealed: always grant.
Reaching beyond opponent's most recent turn: always refuse in rated games.
All others: ask - but leaving the ability to automatically refuse those (which would also void your own requests in the same situation)