but how about when somebody wants to initiate a connection with a particular computer behind a router
In this case say if you were running a webserver you would tell the router to forward all connection requests on port 80 to the computer running the webserver. But unless port forwarding is set up to forward connection requests, it becomes very difficult to initiate a connection with a computer behind a NAT router. When *you* initiate the connection, the NAT router the establishes a state between your computer and the computer you are connecting to, and forwards packets from that remote computer accordingly. However, when recieving traffic that is unexpected, the router will not know what to do with it. In some cases, this causes problems with p2p networks, Instant Messaging, and online gaming, to name a few. This is because these applications need incoming messages on ports or with protocols with which a connection state is not maintained (i.e. the router is not expecting information from these remote computers).

So in short, Internet access behind a NAT router works most of the time, for most applications. But some more specialized applications will have problems with it due to the problems you mentioned in your question.

Hope this helps.