Retrieve value from client in response to checkbox change

I'm glad you found a solution that works for you. In answer to your underlying question:

Isn't there a way to send a query from R to Javascript and get an immediate response, or equivalently a way for R to send a message to Javascript and wait for a return value?

No--the communication between R and the browser is non-blocking. There isn't a way to block the R thread while you wait for an answer to come. However, you could cancel the current call while you wait for a response--maybe that's what you're doing now with shinyGetPar3d? Anyway, there's a little known option to req called cancelOutput (e.g. req(FALSE, cancelOutput=TRUE)), which throws a special error that stops the currently executing render function but tells it to leave the existing output in place (rather than clearing it, as req(FALSE) does. You could use that as the building block for something perhaps.