I thought Cygwin programs used Unix APIs provided by the
Cygwin libraries, in particular cygwin1.dll.
Perfectly true.
Presumably the Cygwin emulation layer could read the keyboard
in the same way that Linux programs do, although I don't know
what happens in practice.
No, it could not. It can't use the Linux device driver; Cygwin
is not any kind of virtual machine system, so the reading has
to be done by Windows' device driver at the hardware level,
and Cygwin has to ask Windows for keyboadr input.