Once #243 lands, COM4 can be used either as an "externally-facing" serial port (where we want bytes to be written to/read from some process external to Propolis) or as a communications channel for a SoftNPU device. This creates a sort of device/backend model for serial ports: the device is the UART emulation, and the backend is either the "pipe these bytes externally" widget or the SoftNPU code.
It's been long enough since I've looked at the UART code that I'm not sure how hard it would be to create this split in Propolis. This also requires some instance spec work to change how serial ports are defined.