I might try assiging a different duration of button hold for each possible number of clicks. E.g. (in plain english)
If clicks = 1, press and release If clicks = 2, press and hold for 1 second If clicks = 3, press and hold for 2 seconds etc.
This method does seem a bit archaic, I wonder if there is any way to dynamically and continuously relate the number of clicks to a button press duration. I think there'd probably need to be a minor delay and a buffer somewhere in there - far too complicated for me!
The other possibility is for me to re-work the IR code in such a way that no pause is introduced at the end of each button press (is that what happens)? It's the only way I can understand why if you press a button repeatedly very quickly, the response on the receiving device will be limited to a certain number per second. However if you press and hold the same button, the number of responses per second are far more.
As if when you press the up button rapidly (or in my case rotate the wheel quickly), the IR being sent goes something like:
Hello > Up > Wait. Hello > Up > Wait. Hello > Up > Wait...