The <<word
syntax ("Here documents") redirects standard input. So what you've done is start up a bash whose standard input is redirected to the "here document". When that bash starts up children (or executes builtin commands), these inherit standard input from the bash, so they are also reading from the here document. (There is nothing particularly mysterious about here documents. One implementation possibility is to copy the here document into a temporary file, and then redirect standard input to that file. Bash may do that under certain circumstances.)
Redirecting standard input is not the only way to get bash to execute a file. You can just give bash the name of the file on the command line. Again, you don't need a real file for this to work; you can use process substitution, like this:
bash <(echo '
read -p "Say it: " A
echo You said $A
')
Since that doesn't redirect standard input, the read
will read from standard input, not from the commands fed into bash.
Watch out for quotation problems, though: they bit me twice typing that simple example.