Transactions from Steemit are signed by the browser locally, sent to Steemit's servers, forwarded to their node, and then are broadcast to the peers their nodes are connected to. Each Steem node (seed nodes, witness nodes, API nodes, any node) is broadcasting the transactions it sees and also sharing node addresses with other nodes. The witness nodes get the transactions, verify they are legitimate (like other nodes have checked), and include them into a block when the account they are configured to generate from are scheduled to generate a block.
As for node count, I don't know. If I had to guess I'd say at least 100. More is obviously better and more robust.