I think that the biggest differences bewteen the two are that, with a pipe, you can communicate both ways bewteen SAS and the program or call you are executing.
A nice summary of possible uses of pipes can be found in the following SGF paper:
http://www2.sas.com/proceedings/forum2008/092-2008.pdf
Pipes are also nice in that you don't have to change your system options like noxwait, xsync, etc.
However, when you don't have to communicate both ways, they require an extra step in that you have to first declare them, and then use them.
HTH,
Art