Because when the thing you want to do is not supported, making a mess may be a solution.
I’ll tell you, things ain’t easy. In the first place, they’re not easy for the creators of systems, platforms, technologies. You want to support this and that, but you can’t do it all. Technical, practical and ethical limitations chain them to the ground. And because they’re constrained, developers using their stuff have it harder too. Example, web page rendering is a fucking beast of a problem, and some things just aren’t possible by default because it’d be a huge performance burden.
But then there’s the times you still want to do those things. No native solution exists, and chances are you won’t find all the parts you need readily available either. You’ll have to get away with a shitty hackjob, and try to make it as not shitty as you possibly can.
Sometimes, great things happen when this is done. Other time, well, I’m sure you’ve visited a website or two that tried to do something fancy but didn’t make it work just quite right. And god forbid you look at the technical implementation of the thing.
Computers are hard, okay?