The Ada 83 Rationale, specifically Chapter 11, goes into depth over why they made certain decisions regarding overloading and visibility. Neither of those rules seem insane to me.
Well sane decisions may lead to insane results. But I see nothing in the Rationale why a directly visible function (enumeration literal is a function) must be hidden by an object in one case and overloaded in another.
P.S. There is a another case producing similar illogical result, but it is related to the use-clause. It is worse than this one, because it is a booby trap that makes a legal program illegal when the specification of a package in the use-clause gets changed to its semantic equivalent:
In the first example, A the enum literal and A the object are defined in the same declarative region. In Ada the rule is that if you declare an object (meaning a variable or constant) in a declarative region, then no other entity can be declared with the same name in that declarative region. Of course nested scopes can hide the name. (kill seems like an excessively violent term for this)
In the second example, A the enum literal is introduced implicitly via the derived type declaration; it is not explicitly declared in the region. I suspect the rationale for allowing overloading here is to avoid the case where adding a new enum literal to the base type causes compile errors at all places that derive from that type and also have existing entities with the same name. Your third example seems to be a case where that principle fails, though.
Derived types in general lead to a lot of confusing edge cases and complex rules. But there is no way to simplify any of this in a language proposal because it would break tons of existing code going back to Ada 83.