A diode is a one-way brick — in, no out. You can't make a two-way wall from a single one-way brick. But stack two of them anti-parallel (one facing each way) with a direction control, and the pair passes either way — you pick. A row of those is a two-way bus built entirely from one-way bricks. The bricks never stop being one-way. The house is what's two-way.
Each brick is a one-way valve — it passes a packet in its direction only, and blocks the reverse. On its own, it's a diode: in-no-out. No single brick is two-way, and no amount of identical bricks stacked the same way changes that — they'd all just point the same direction.
Put two one-way bricks side by side facing opposite directions — one A→B, one B→A — each with its own enable. Now a direction control picks which brick is open: enable the A→B brick and packets flow right; enable the B→A brick and they flow left. The pair is bidirectional — built from two one-way parts. This is exactly how a real bidirectional bus transceiver works (two banks of one-way buffers and a direction pin).
A row of these cells is a two-way bus — a wall of one-way bricks that, as a whole, carries traffic both directions. You compose one-way primitives precisely to build two-way function. The one-wayness of the brick is what makes it controllable, and controllable one-way valves, wired in opposition, become a router — and routers go both ways. The brick's limitation is the house's freedom.