1000Hz scanning is definitely possible even on a slow microcontroller, but it doesn't make sense at all. If you just scan so fast without debouncing, you'll get multiple keypresses because of the mechanical bounce properties of switches (especially used ones). So the simplest way to debounce is to scan more slowly. It can even take up to 50ms for a switch to stop bouncing, so 20-50 times per second would be a sensible rate to scan.
The harder one is to actually remember for every key when it was pressed and ignore its press and release events for a particular period of time, like 50ms, but still scan fast.
So the whole difference between scanning at 1000Hz and 50Hz is that because you scan every 20ms, you can get up to 20ms lag, whereas with 1000Hz the lag is just 1ms. Whether it matters for a human being, I don't think so. I don't know if a human being is capable of noticing a 20ms lag at all... Except for that someone should make some research on the extra lag introduced by the protocol and the OS. The OS has a lot more important things to do than receiving keypresses, and I think it might take some extra time for them to get to the application.
As for limitations, 1000Hz is the limit for USB, because this is the maximum rate a keyboard can send new reports to the computer at. You also have to remember that any other devices connected to the same hub transmitting data will likely decrease this rate. USB devices are polled, so they can't initiate any transmission on their own, it all depends on the computer.