When redirecting the UART service to pins, it doesn't turn off the CTRL-C handling, so receiving a binary 0x03 from the device at the other end will generate a KeyboardInterrupt and stops the MicroPython program running.
This has potentially been fixed in the version1 branch of micropython, it has
micropython.kbd_intr(chr) and if you pass -1 as the
chr argument then that will disable CTRL-C interrupts. The v1 branch is currently available to test in the online python editor