On systems with
cat - << E0 /dev/fd/3 3<< E3
That is, open the two here documents on different file descriptors. If you open them both on fd 0, of course the last open overrides the previous ones.
The above would be more useful with commands like
zsh has the
MULT_IOS feature (enabled by default and disabled with
unsetopt MULT_IOS or when emulating other shells) whereby if you redirect a file descriptor for input more than once, zsh feeds instead the concatenation of the corresponding inputs (via a pipe in a separate process). So in zsh:
$ cat << E1 << E2
cat's stdin is a pipe then and zsh feeds the content of the two here documents in sequence at the other end of the pipe.
There a similar feature for output redirection.
ls > a > b
ls write to a pipe and zsh writes to
b concurrently (like a form of
tee) while in other shell's
ls's stdout would just be
a would have been truncated but never written to).