It depends on what you mean by decentralization. There is a technical meaning, and an intuitive one.
I’ll talk about the first one first. A decentralized system is one which by design functions and remains secure without the presence of a trusted central party (or parties). I can’t tell you what part of Bitcoin makes it have this property – it just happens to be the case that it does, at least under certain assumptions. Both miners and nodes matter. We need miners to avoid a central transaction approves with censorship rights. You avoid the need to trust that miners produce honest blocks by validating their chain yourself (= running a node).
Often the word “decentralization” is used in a much more practical sense, where far more aspects of the design and real-world implementation are included. It’s hard to say what this includes, as there isn’t a good definition. Does the entire ecosystem just go along with what a single, perhaps small, developer team proposes? That’s arguably a form of centralization in practice, but it’s one at a social/human layer, not one that is a technical design property of the system. Similarly, does all trading trading go through one or a few exchanges? That too can be considered a central party if its relevance to the ecosystem becomes too great. The same is true for wallet software for example – if everyone is using the same wallet software that auto-update, then perhaps the person with the keys to push such updates is a centrally trusted party.
I personally dislike this use of the term decentralization as it is far too vague, and unbounded. Are Intel and AMD and ARM central parties, because everyone uses chips produced/designed by them? For this reason I’d reserve the use of the term decentralization for the technical design, and use something like “trust minimization” for all the rest.