From the source:
When a stream is fully buffered, characters are intended to be transmitted to or from the host environment as a block when a buffer is filled.
Basically, with a fully buffered stream the source sends nothing until it's output buffer is completely full, or it reaches the end of data it wants to send.
So the destination gets no data until a buffer full is available (or the end of the source is reached).
Think of it as a shop selling loose peanuts: the assistant pours 500g into a bag and hands it over to the customer. Then they pour another 500g into another bag, and pass that over as well. Then finally, he pours 250g into a third bag, and the customer has his 1.25Kg of nuts, and can pay and go.
The bag can't take more than 500g, so that's what gets "delivered" at any one time.