The difference is keystroke buffering - the agent in sabre can type ahead while the system is processing a transaction, the web/gui user has to wait for each screen to load.
Its not the hardware keyboard buffer, its the tty readline or equivalent buffer which ends up being a like a stack of commands for the app which pops off the next buffered line after the previous line has processed.
Although I'm sure its technically possible to do it, in reality no gui apps work that way and extra keystrokes end up lost while web forms refresh or a 2 tier app is waiting for the DB to respond.
https://learn.microsoft.com/en-us/windows/win32/inputdev/key...
https://tronche.com/gui/x/xlib/events/keyboard-pointer/keybo...