In the same-origin paradigm, every origin is a pocket universe.
Each pocket universe starts with a few bits of functionality provided by the browser, but has to bring most of its own functionality and data.
Each universe must implement from scratch a lot of obvious functionality (or import it from a library).
Because this functionality is done "in user land", it's hard to coordinate multiple origins to use the same one.
Each origin has to recreate many parts of the universe individually, and any functionality that could have a kind of network effect with more use can't get off the ground.
The vast majority of functionality that is specific to a given experience is thin and small… but every origin has to reinvent the world anew in their own pocket universe.
So much duplicated effort!