I think you should embrace the choice to deliberately underpower themselves as another expression of player autonomy. This is a play pattern you'll often see in speedrunning communities, or players showing off for a stream: "look, I'm so good at this, I can get X far / beat the game with just the starting loadout!" — even/especially in notoriously challenging games like Souls-likes.
So that's a vote against forced upgrades or scaling difficulty to match the upgrade level.
Scaling difficulty to upgrades also risks hitting the other side of the Red Queen effect: rather than needing to upgrade just to avoid falling behind, now even when the player upgrades, they can't get ahead. The difficulty scaling adjusting to balance out upgrades can rob the player of a tangible sense of growth or impact of their choices. Ideally you'll usually want the difficulty steps slightly offset from the upgrade opportunities, so players have a chance to use their new toys at the old difficulty and feel how much more powerful they are now, before the challenge escalates to demand that new power just to survive.
An alternative approach you could take is to offer backup upgrades "just in time" when it becomes a problem. Say, if the player dies twice on the same world, a rescue ship picks them up to drop them at the start of the current level again, and the player has a choice to purchase upgrades from the rescue ship.
This way, a player who's successfully playing the game with a lower upgrade level than you planned for doesn't get pressured/badgered into buying upgrades they don't need: the rescue ship never comes to them.
But a player who thought they could do one more world without upgrades and discovers they were wrong has an opportunity to fix the mistake after a limited amount of frustration/setback that you can control, by choosing how many deaths trigger the rescue.
Players are disincentivized from just upgrading willy-nilly because they have to die for it — something they'll often avoid out of pride or to avoid delays/re-doing sections, even beyond any extra penalties you might impose. A death counter reported on the game-end screens can be enough to strongly motivate players to keep that number low. You can even add a range of randomness so the rescue, they can't predict exactly how many deaths it will take. The net effect is that players will mostly try to survive the whole world and upgrade at the regular shop as intended. This can be further incentivized by giving the world-end shop better selection than the just-in-time version.
You can also limit the rescues/upgrades obtained on rescue to the number of upgrades passed up, if desired, to allow the player to use it only to catch up to where you planned them to be, rather than cheese it to get further ahead. But I might recommend letting the player buy past the planned upgrade level — this gives some in-built player-controlled difficulty and can improve the game's accessibility, while staying unobtrusive to players who don't want or need it.
This can of course take different forms depending on your game's fiction: a wormhole anomaly littered with junk you can salvage for upgrades, an ancient alien vessel with mysterious motives, divine intervention, or maybe you don't even dress it up in fiction at all and just present it as a non-diegetic menu like the "Continue?" screens of old.