If a client has no port open (in the language of most small residental routers), that only blocks incoming connections.
A machine behind that router can still initiate connections with others. Once it does, the router remembers that and allows two-way communication. NAT, the function that lets you have more than one machine share a single public IP, has to do this to work.
So communication is possible with no open ports on your router, it's just your computer has to initiate it; an external machine cannot initiate connection with any computer behind that router unless you open a port, and connect a port to a specific IP behind your router.
I'm not too keen on the low-level details of the bittorrent protocol, but I think it or some revision thereof allows machines to receive data by initiating connections with others somehow, rather than just listening on an open port and waiting for an external machine to start a connection.