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.
https://learn.microsoft.com/en-us/windows/win32/inputdev/key...
https://tronche.com/gui/x/xlib/events/keyboard-pointer/keybo...
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.