Thanks @guiwitz for the extensive answer. It is actually helpful - you seem to be pragmatic and facing the same general question of “how do I quickly on-board ‘normal’ students?” By “normal” I mean students who are at least somewhat motivated about the subject, but probably not about software installation.
This is perhaps part of the reason that I am more positive on JupyterLab - at UC Berkeley I worked on a standard campus VM, and now I work at Gigantum where we use Docker for everything. I assume repo2docker can solve your issue as well, but definitely, Gigantum will allow an expert to install arbitrary software using arbitrary Linux commands in the “advanced” section. For example, here’s a short post about Dask Dashboards in Gigantum (I hesitate somewhat here, as I don’t want to be a skeezy self-promoter - I welcome PMs or comments here to that concern!). With these kinds of fully virtualized methods, you learn to pay a somewhat substantial up-front cost, but then you get superior on-the-same-page-ness from that point forwards.
But switching tracks, and answering this query:
I think as long as you’ve got nodejs installed, it’s not so hard to install extensions via the JupyterLab extension manager… It’s quick to try! It’s on-by-default now in JupyterLab 2.1. While that’s actually a minor annoyance to me - as I want to support JupyterLab for naive users without nodejs - your use-case helps me see the wisdom in that choice
So, I think virtualization solves some of your issues. It seems that changes in the JupyterLab extension manager may also sufficiently solve some of your issues. As always in Jupyter-land, there are ever-expanding sets of choices!