Consider the following example: there is three programs: A, B, C. Program A outputs some kind of stream. Program B reads the stream until some moment (for example, it reads a header). Program C takes the header, read by B and the stream, outputed by A and parses further message.
C must be executed after B. But (A, B) and (A, C) must share a pipe. This cannot be implemented now.