I never saw what the Bell Labs folks had against Berkeley sockets, aside from them being from Berkeley and not Bell Labs. It's a crufty interface either way, because you can't shove all the complexity under the rug.
They're optimizing for as few syscalls as possible, I suppose, but in Plan 9 you still create pipes with pipe(), not by writing to a special file. And if you already have pipe(), why not socket()?