I'll offer two approaches to bidirectional feeder service with a single intermediate station. For clarity, let's say that there are three towns, A, B, C, each with a single logical station (which may be, say, a bus station joined to a train station or dock). The lines connecting these are A-B, B-C. We'll assume the cargo is pax.
(1) Advanced Settings > Stations > Use improved loading algorithm > ON and let, for both lines, the order at intermediate station B read Transfer and wait for full load.
If there is sufficient capacity on each line and your timing is good, there will be an A-B vehicle waiting at B when a B-C vehicle transfers, which is to say cargo unloads but will not be accepted at B. The A-B will pick up the pax dropped by the B-C so the latter in its turn must wait for the next A-B. If there were no waiting A-B then, yes, the B-C will pick up the pax it just dropped.
This is tricky and requires a lot of fussbudgetry. Town B must supply some pax to both lines since there will be some loss: a full load B-C won't quite make by itself a full load A-B. So B can't be in a cornfield. If there are several vehicles on each line and a B-C is waiting when another B-C arrives then again, those pax will go right back where they boarded. You might timetable both lines although this will interact poorly with 'full load'.
(2) Play with the cargodist patch. This is slightly buggy and has some limitations, which is why it's not in trunk. (For instance, conditional orders don't work.) Now you can arbitrarily run A-B, B-C with pretty much any orders and frequency. The station GUI will show not merely pax waiting but pax waiting with a desired destination. They will not go back but will wait for the next vehicle going the right way. This works well... when it works. I find the good outweighs the bad.
The cargodist patch is no longer maintained by its original author but it's part of chillpack, which contains many neat patches. See: forum thread. As of now, the "LATEST" revision to chillpack was made 2011 Nov 18: Download. The most recent revision is shown as 2012 Jan 25, just two days ago.