There as always other ways although I agree with the use of containers in the end. But there are other elements of notebooks that tackle some of the key items you highlighted.
For example `jupytext` to make nbs more VCS friendly, python-dotenv for better secrets management and even using the "!" operator to run "!conda list" or "!pip freeze" or there equivalent.
As for modularity there is Papermill.