On my tests, the buffering only happens for the first run of the bash script. So
bash -c 'echo' > pipe; bash -c 'echo hi; sleep 5; echo bye' > pipe
does pretty much what you want, but with an extra newline at the top. (I didn't even need stdbuf).