Technically, any device which has its own driver and software could do this by programming their own USB protocol. Heck, they could even reuse the hardware and keyboard protocol. They would just need to change the device type ids and get a custom driver which is based on the keyboard one.