Just some quick thoughts:
Use a third IP (virtual) address on both interfaces, if one goes down, packets can go on the other device (assuming your other device has a route). This needs some work.
iptables can already match on source port and user, wouldn't that be enough?
You could create a tunnel between the two devices.
Try searching for "TCP session mobility" (which would allow IP addresses to change, hopefully). I do remember seeing a program that proxied all the connections, so you could do this. It was a while ago, and can't quickly find it on google or in my bookmarks.
for "mobile IP" never tried it myself, but maybe you'll find something.
Anyways, post back with what you find out.