In case anyone's keeping track, Reddit user McDutchie says:
Ctrl+C interrupts all the processes in the current process group. When your [jslisten] is invoked from .bashrc, I think you'll find it shares a process group ID with bash itself. You can check this with:
ps -o pid -o pgid -o commThe -m option, a.k.a. -o monitor, causes bash to give background processes (including those invoked from a subshell, as you're doing) their own process group, so that Ctrl+C does not interrupt them. This option is on by default for interactive shells, but profile scripts are run before bash turns it on. But you can turn it on yourself within the subshell that you're invoking the background process from:
[[ "$(tty)" == "/dev/tty1" ]] && (set -m; /opt/retropie/configs/all/jslisten/jslisten /dev/input/js0 &)
This does indeed seem to be my solution. Ctrl-c (for example, to cancel a half-typed command when I notice a typo at the beginning) no longer kills the jslisten process, allowing my "logout hotkey combo" to remain functional.