We currently use cyclades serial client for serial port redirection, which is based on LD_PRELOAD. This can be a limitation in that it requires a preserved environment, some binaries don't support LD_PRELOAD, and injecting libraries is in itself somewhat dangerous.
An alternative could be the CUSE system (based on FUSE) that allows us to create fake character devices. It is available in Linux 2.6.31 (RHEL 6-ish) and later. ioctl's are a bit peculiar there and could pose problems. However they aren't working right now either (bug 536).