OK, encontrei a solução e levei um pouco de tentativa e erro:
No lado do host (Linux), é assim que socat
precisa ser chamado:
stty -icanon && socat - /tmp/win-serial-com3,cr
No lado do Convidado, o PuTTY deve ser invocado com "LF Implicit em cada CR", e desabilitado "CR de Implicidade em cada LF", nas configurações de "Terminal".
Ainda não é o ideal.
Quando pressiono backspace no lado do host, ele imprime um ^?
, em vez de apagar o caractere anterior. No lado do convidado, isso funciona bem. Ao pressionar backspace no lado do convidado, apaga os caracteres do lado do convidado, mas não do lado do host. Eu ainda tenho que encontrar uma maneira de trabalhar com o backspace .