Which is why notebooks typically a) declare all imports/dependencies in the first block and b) the entire notebook is rerun from a fresh session before publishing (and notebooks have a keyboard command for doing that too).
In all my years of work with Notebooks, I've never had an issue with downstream dependencies.
Important distinction: the notebooks themselves don't do this. The notebook authors, by convention, are supposed to do this.
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.
It's possible (actually very easy) to have code which works as you're making it but not if you run it from scratch.