Depending on what you want to do exactly, I would look into how to set up "Source NAT". A good reference seems to be on the netfilter HOWTO section 6.1. Here, the netfilter framework keeps track of the change and also rewrites/reroutes responding answers to the correct sending port.
polaris:~# iptables -t nat -A POSTROUTING -d qew -p tcp --destination-port 1444 -j SNAT --to :2347
polaris:~# telnet qew 1444
Connected to qew.
Escape character is '^]'.
and on the other side:
qew:~# nc -l -p 1444
In another shell showing that the source port of the packets from polaris to qew were actually changed.
qew:~# netstat -n |grep 1444
tcp 0 0 10.23.1.9:1444 10.23.1.10:2347 ESTABLISHED
If you do not want to have connections magically stay alive, you can also try to modify the packets directly. I can't find a target that does so for ports, but there is an extension that allows changing the TTL field, so I might just not have looked carefully enough.
Last resort would be to use the QUEUE target to route your packets to user-land, modify them, update all the checksums, and then give them back to the kernel.