How to let a peer connect to a peer's peer?
The basic problem you need to solve is this: B knows about other nodes on the network, and needs to inform A of this.  So, your coin's protocol will have to include some way for this to happen.

In Bitcoin, node A would send a getaddr message to B, and  B would respond with an addr message, listing other nodes it knows about (in this case, C).  Then A can try to connect directly to these nodes.  See https://en.bitcoin.it/wiki/Protocol_documentation for more information about these messages.  If you started with the Bitcoin source for your altcoin, then you should investigate why this isn't happening.

A seed node is a special case of this, to handle the situation where a brand-new client doesn't yet know about any other nodes on the network.  Someone promises to operate a node that should stay working reliably and be available at a specific IP address or DNS name (a so-called DNS seed).  This address or DNS name can then be hard-coded in the client source code, so that new clients will try that node first.  See What is a DNS seed node vs a Seed Node?. Using the getaddr/addr protocol, the seed node can then inform the client of other nodes.  Once the client connects to some of those nodes, it can find out about additional nodes, and so on until the client reaches whatever connection limit it has configured.

In some cases the seed node might be configured to only respond to getaddr requests and not to any other type of request, so that it does not get overloaded with relaying blocks, transactions, etc, and stays available for its main job of helping clients find each other.