It seems make-custom-textual-input-port will solve the problem of intercepting reads from stdin in evaluation thread. It is not in a release version, but is available in guile-next:
git.sv.gnu.org/cgit/guile.git/

Thank you to @wingo for implementing it! :)

#guile #scheme #lisp #guix