Agreed, although server-side computation can be done via API endpoints in this scenario. On the whole, I think more flexibility on the client side can only help things.
On the R side, the Rocker organization already provides a set of stable-versioned container definitions as a starting point: https://hub.docker.com/r/rocker/r-ver/.
Unfortunately, on the Shiny side, I requested similar stable-versioned container definitions, and Carl Boettig generously submitted a PR creating them, but that PR has languished since February 2017: https://github.com/rocker-org/shiny/pull/24. The harsh response from Dirk may have something to do with it, as noted in a separate issue on the same repo, where the requester decided instead to fork and deal with it himself: https://github.com/rocker-org/shiny/issues/25. Not sure if that will ever get merged.
I’m not actively working on the Python side these days, but I have to imagine there are stable-versioned containerized environments for Anaconda or similar that could be used.