The bash manual mentions how it emulates the >(...) syntax using either named pipes or named file descriptors, so if you don't want to depend on bash, perhaps you could do that manually in your script.
mknod FIFO
program3 < FIFO &
program1 | tee FIFO | program2
wait
rm FIFO