Yes, I figured it would require some JS... Defining a new input widget sort of thing...
Scenario is that the user enters information (numbers, text) in the input panel on the left. Using the current reactive model, I can generate output on the right-hand-side pretty easily. But I want the user to be able to push a button, not to update the output, but to run other (arbitrary code). In this case, I want to take the information in the left-hand panel, plus some computed data that's rendered on the right-hand output panel, and store it in a database. The only output I'd want to change might be a status message below the button (which seems straightforward).
What doesn't work now is that having a submitButton in the UI (even in a different panel!) seems to cause the whole UI to stop updating reactively. I don't want that. I just want the button to be like any other widget, where pressing it causes some sort of event to happen which in turn causes a reactive function on the server side to run.
I tried adapting the incrementing-button example in the docs to see if that works, but it seems like any sort of button does the UI-freezing behavior, even if it's created from scratch.