Termux:Widget and Emacs: can't start subprocesses
I solved this while I was trying to be thorough while writing the question: it was in the documentation, I just couldn't figure it out.
I needed to set LD_PRELOAD, as documented by termux-exec, so that Emacs runs with the modified version of the exec() system call.  My two-line script is now

PREFIX=/data/data/com.termux/files/usr
TERMUX_EXEC=${PREFIX}/lib/libtermux-exec.so
[ -e $TERMUX_EXEC ] &amp;&amp; export LD_PRELOAD=$TERMUX_EXEC
filename=$(a little shell logic)
emacs $filename


The extra existence-checking cruft is so that LD_PRELOAD remains unset (or unmodified) where I run this same convenient script on my non-Termux systems.