You can probably do this with ordinary files if your don't need any concurrency at all. The principle for named pipes is the same
Change
foo | \ bar | \ baz
To
foo > foo.out bar < foo.out > bar.out baz < bar.out
If the *.out are named pipes then I suspect the programs writing to them may get blocked waiting for their output buffers to be drained.