If reproducibility is important, like you say, then a notebook is the last thing you want. Your code needs to be tested and designed like the software it is, instead of tossed into some notebook that does not fit into classic software practices.
It's possible (actually very easy) to have code which works as you're making it but not if you run it from scratch.
In all my years of work with Notebooks, I've never had an issue with downstream dependencies.
This is no different than engineers who are, by convention, supposed to write bug-free code. Even with this convention, however, devs still rely on testing to decrease the likelihood of bugs.
No similar tooling exists for notebooks, which is why I recommend moving re-used logic into a tested codebase.
Dynamic data/reporting is a different thing entirely, at which point things like business intelligence software and dashboards come into play, and outside the scope of a command line anyways.