As @nomeata says, some of these quirks are historical, some are subjective, but there is one point I’d like to comment on, which is the problem of exposing the interface of a canister.
The main problem with that has in fact been that the IC currently provides no way to attach meta data to a canister -– and the interface description is an instance of that. There have been discussions how to introduce such functionality in a suitably general fashion, but nothing came out of it so far. The language team is currently picking that up again and we want to push for a solution.
So why do I think it is crucial to think of the interface description as meta data, and not something dynamic?
Well, an interface essentially is the type of a canister, just like the type of a value in a programming language. And as such it doesn’t make sense to allow it to change randomly. Other services interacting with a canister are built with concrete assumptions about its interface, and because these are built in, they are static assumptions. A canister would be programmatically useless without statically fixing at least parts of its interface. And even for parts that are not “fixed”, you’d ideally still want a statically fixed description of what’s “dynamic” about them and how it could change (generic types are one example of that, but there are more flexible notions one could have).
There also is a methodological argument for separating the interface domain from a canister’s “meta interface”, such as the ability to ask about its interface. The latter essentially is a form of reflection. And nowadays it is an established wisdom, at least in programming language design, that reflection ought to be separated from the functional domain. Some arguments to this effect are summarised in the original paper on mirrors, which are a more modern incarnation of a reflection mechanism that adheres to this principle. And some of these arguments likewise apply to the IC.
Polluting each canister with an interface reflection method would be a step backwards in that regard. It also doesn’t extend to meta data that is not meant for public consumption (such as the internal stable types of a Motoko canister, which only the owner ought to see). So we need something better.