> But that requires being precise with dependency declaration in a way that a lot of people don't want to be.
Some programming language stacks already fix that problem in a transparent way. Take Microsoft's .NET Core+Nuget stack. Developers can add packages to a project without specifying a version number (implicitly it's the latest release) and dependencies are checked when all dependencies are restored.
IIRC Rust's cargo also follow a similar approach, and so do npm and yarn. So, that's pretty much standard at this point.