I believe the code works as you would expect it to (it seems to under Solaris 2.8). Yes "Readmode 4" will prevent the user from using ^C, ^D, ^Z, etc. to escape from the input.
To solve the double Enter problem try using "ReadMode 5" instead. It behaves just like ReadMode4 except that no CR/LF translation is performed, and if possible, parity will be disabled (only if not being used by the terminal, however. It is no different from mode 4 under Windows.): an excerpt from the perldoc Term::ReadKey docs. But since you are using cygwin, there may be an exception in that case.