Thing is, nothing is 'broken'. It is working as it was designed to work. Whether that's a bad design is another question entirely.
The reason for it is performance. The more parameters you have that are optional, the more permutations have to be accounted for. This is why, for example, there are 5 separate instances of the quote bbc, multiple instances of img bbc, for the discrete list of supported parameters. If you were to separate it into a single all-in-one as you're proposing, it would actually be quite a bit slower than it currently is. (I know, I've tried.)