As a software engineer who spend the vast majority of his time on (successfully) putting newer Android versions on the vast majority of older Android devices:
Yes the hardware is the bottleneck.
This pains me, because what I can do is software, not hardware, where I spend all of my time is software.
An app just needs to target Android 7 to target 95%+ of users (so "only" 5% additional e-waste). And for app developers, targeting Android 7 is fairly easy (and the vast majority do), because Google provide androidx which is a compatibility library that provides backward-compatible APIs for every new shiny things. It's not 0 effort, and I understand app developers preferring Apple ecosystem here, but most of the Android app developers I've seen do use androidx and do target around Android 7. [1]
So, you get reasonably 5-7 years of app that are still working. The average renewal rate still barely bulged and still is around 2 years. People are not renewing their devices because of apps that are no longer supported.
IMO things that make people renew:
- Things that are a bit broken but annoying enough and accumulate: Too many apps leading to slow down, USB-C port getting dust making the connection harder
- The phones always look shinier in-store (because of over-saturated, over-brightness-ed screen amongst other things), so I'm pretty sure stores would manage to sell the same device over and over again by just changing the name.
- Kinda the same: Despite Gorilla Glass 424 Ultra Pro Max, screen's glass do wear, and phones' screen look worse and worse over time (if you have a screen protection, the screen will still look shinier in-store, if you don't your screen will be weary, and the screen in-store will look shinier) -- I like what Rebel Tech is trying to do here, they are trying to replace exclusively the glass part of the screen. That's so much cheaper that you could do it every 6 months to make your device look new again.
- Completely random software bug (which could very well be BECAUSE the device got a software upgrade, or could be just a bug in the app, or just Google decided that this was the new Best User Experience) that make people think "yeah well I get it, my phone's old"
[1] I do know of one exception: Slack app. They are deprecating Android 7 and Android 8. They suck.