I agree that, assuming there is a noticeable performance difference (especially on laggy servers), a delay can be pretty annoying. I did come up with a (somewhat complex) idea that may help with the problem:
If you think about it statistically, I'm guessing that well over 95% of commands that will go through this challenge process will pass. What would happen if we were to buffer the command like AzuiSleet mentions, but instead of waiting for the response from the client, go ahead and execute the command immediately? Then, after a specified amount of time, if no response from the client is received, "undo" the command.
This method obviously would require specific parameters on a per-command basis, like so:
For commands with opposites (ragdoll, jail, ignite), this causes no issues, and a fake command against another player would result in being ragdolled only for a second (or however long the wait time is).
For commands that change a state of a player (hp, armor, teleport, bring), we'd need to save the old parameters in order to properly "undo" the command.
For non-opposite commands (slap, whip, maul, asay, csay, thetime), perhaps they could be executed immediately, then a warning message can be displayed to all once ULX doesn't receive the challenge?
For non-important commands (in terms of it not really making a large difference on if it's executed a few seconds late), we can just leave these alone to wait for the challenge. (vote, votekick, voteban, votemap)
And for the most important commands (rcon, luarun, any user management commands), these should all wait for the challenge response. (User management commands could probably be undone, but it's better not to risk it).
Or, you know, we could just enable the challenge on only the most important of commands, then ignore it on the rest.
Handling logging on a method like this may be tricky, too