A physical port can and is used for receiving and transmitting unless the port has been specifically configured to half-duplex.
I think where you are getting confused is the actual port source and destination which has nothing to do with a physical port.
When it comes to NAT, the destination and source port number will be different. The destination port number which will sit on a server that provides the service such as port 80 for HTTP. The software will receive many connection requests on this port number and the software will need to distinguish the different processes for each connection that comes in.
The source port number will be a randomly chosen upper port that is not used for any particular service and this will reside on the client device as they are the source of the connection. This also helps the software to distinguish the various connections that are being made for different clients. Imagine a HTTP server with hundreds of simultanious connections and not to mention the different connections the browser will make on port 80 itself as destination. When the data comes back, it relies on the source port number to tell the software where the data is destined for in the upper layers of the stack model.
NAT uses the source port number to manage the different connections that are being NAT'd. If they all used the same source port, then NAT, using it's table, would not be able to distinguish between the different connections, and know where it needs to forward the data to on the local network.So a source port is mapped to a local IP address that is on the inside of the NAT for as long as the TCP connection is still alive.
To get a better idea of what is happening and to udnerstand why the source port can't be the same, check out this resource:
Hope this helps you on your quest.