It seems that there is a way to get an interactive message to the terminal in batch mode ...
During daemon startup (with an existing .emacs.desktop file), I get this on my terminal:
bunzip2ing contrib-protobufs-2021-06-07-15-56.tbz2...
bunzip2ing contrib-protobufs-2021-06-07-15-56.tbz2...done
Parsing tar file...
Parsing tar file...done
Please type y, n, ! or i, or C-v/M-v to scroll:
This seems to be from make-progress-reporter, which (if I read the code correctly) ends up calling (message "%s %s %s" text pulse-char suffix)). And that message displays interactively on the terminal.
So, there is a way to have the messages from emacsclient --eval display on the terminal, but in some (most?) situations they don't. (The definition for message says: "In batch mode, the message is printed to the standard error stream, followed by a newline.") So, I infer that yes-or-no-p should just use "message" and all will be fine. (Another example of a prompt that should go to the terminal but doesn't: "Active processes exist; kill them and exit anyway" should use "message".)
As to your suggested feature request: I'm not requesting termination of the server non-interactively - I'm just saying that when the shutdown command comes from the command line, the messages be output to the terminal, the way "message" does and not the way yes-or-no-p does.