This is really easy, actually, First, you need to set aside your stdin in some remembered descriptor:
exec 9<&0
There. You've made a copy. Now, let's pipe our commands at our shell.
echo 'echo foo; read <&9; echo bar' | bash
...well, that was easy. Of course, we're not really done yet. We should clean up.
exec 9<&-
Ok, now we're done.
But we can avoid the cleanup if we just group our commands a little...
{ echo 'echo foo; read <&9; echo bar' | bash; } 9<&0
The descriptor only survives as long as its assigned compound command does in that case.