You seem to have a relatively basic understanding of OOP, which to your point leads to inexperienced practioners abusing mechanisms like this. I cannot argue with that point.
Inheritance is very powerful and is the one aspect of OOP that is most often abused to solve problems in programming. You should only use it sparingly, but inexperienced developers take it way too far trying to reuse as much as possible, and then corning themselves. Yes it is a trap, but this does not make it bad. It makes it an advanced tool that needs to be used with skill and care.
OOP does not encourage spaghetti code. Inexperience and lack of discipline in creating decoupled systems creates spaghetti code. This claim is ridiculous. You can create a spaghetti monster in a functional language just as easily. You need to see more codebases.
I understand that you clearly want to sell DOD as the next best general purpose tool. Which is understandable, but you realise you are promoting the same bad behaviour in how you are going about doing that, by claiming its the next best thing.