This would be handy to have, but does not exist. Or: I've not been able to find it.
because there is little I can do without having a major refactor before every robot deployment
byte swapping a major refactor?
That should not be the case.
Many situations require swapping, so building that into a protocol implementation may be annoying, but should not be that difficult.
Karel has swapping functions, so you could also swap on the robot. You could even do that based on whether your code is running on real or simulated hardware.