I assume that the B machine isn't acting as proxy or anything, so as far as A and C are concerned, they each don't exist to each other. Tunnelling only acts to connect one machine to another with encrypted data. I don't think you can "piggyback" through a server to another client. If the server can act as a router/gateway/proxy, then maybe the traffic could cross the tunnel from A to B, then B re-tunnels it to C, but I still don't know if A and C could know about each other (perhaps a static route on each machine would be all that's needed). It'd probably take a lot of configuration, so that the source and destination IPs didn't get all hosed by passing through B.
Yeah...I think if you set a static route on A, telling it that C is reachable through B, and the reverse on C (using the VPN IP's), and put a routing software package on B so that it can forward packets between the machines, then the source IPs will stay the same (because B is only forwarding, not proxying) and they'll properly reach the destination. A and C won't need to "see" each other directly over the tunnel, they only need to see B in order to encrypt the data to B, which then encrypts the data before forwarding to the destination. Since the encryption is only applied for the transfer, server B will decrypt it before reading the destination and re-encrypting to send it along.
Of course, I don't know what sort of software would be available for the routing, or if it could appropriately interact with the VPN.