It also potentially creates a similar problem to DLL hell in Windows, where updating or changing a component potentially breaks dependent software, or multiple versions of the same component need to be kept around. And then there's the "n+1 standard" problem, where everyone doesn't actually agree on what the "standardized" interfaces should be.
The real problem, to me, is that the FOSS model of every user being a programmer fundamentally breaks down when software reaches nontrivial complexity (wherever you choose to set that bar.) You could substitute the browser as the subject of your first sentence with just about any software people use - most of it is too complex for the average person to fully reason about, much less the average programmer.
I don't know how to solve that, other than require all software to be simple enough to fit in a single file and run in a REPL but that's obviously not feasible.
"... (browsers) are multiple different kinds of programs, welded together for no sensible reason: an http fetching daemon, a "runner" to open URLs, several document viewers, a virtual machine, an OS with an API, extensive libraries for everything that the OS below the OS already offered, one or several programming language JIT compiler(s) and runtime(s), and some bits and pieces. In a healthy environment, there would not be a second OS on top of the normal one. And all those parts would be separate software, with standardized interfaces. ..."
[1] https://news.ycombinator.com/item?id=21061067