You can also have a key-input delay.
When a key is pressed, set a timer. If they're still holding down the same key when the timer runs out, count it as "another" keypress. This way, they don't have to hit the same key a hundred times to move the cursor around, but they also don't get the key moving so quickly that it's impractical.
If they let up on the key, clear the timer. This DOES allow for someone to hit the key very quickly to move the cursor faster than your timer would allow, and it prevents the timer from continuing to think a DIFFERENT key should wait until it's done counting before it accepts its input.
Just my 2 cents...