There are too many cooks in the computer world, imperfect standards (and accompanying documentation), great complexity, too many changes, and the somewhat unique possibility that a small problem can mess up everything - if your car has a minor noise coming from, say, an interior vent, it doesn't crash the whole car.
And all kinds of SW gets installed, including lots of stuff that goes under the casual user's radar - stuff that even if it's well intended might cause problems. And sometimes the bigger, household names (like the ones you mentioned) insist on installing layers of their own crap to try and make things "better", "easier" or somehow "add value" and those of us who are more closely involved with computers tend to avoid that stuff like the plague.
There are also business related problems - too few programmers are often asked to do too much in too little time and stuff is sent out the door too soon with too little testing. Then resources are torn between the next revenue-creating-release vs. fixing the current release (which doesn't pull in any new revenue, at least in the short term). Prioritizing things is difficult: Which bugs should get fixed first, minor easy-to-fix stuff or more serious but more time consuming, harder to fix stuff? And when some bugs fall into the category of very serious, but only affecting a small number of users, how do you prioritize those?
Unfortunately, all of these factors collude to make life difficult. For those of us more versed in computer stuff, we are very careful in what HW we buy and then guard our systems carefully from unnecessary SW in order to try and minimize, but not eliminate, problems. But this gets beyond the average user's scope very quickly.
Sadly, I don't have a better answer for you.