I wonder if we should build on the any and some prefix syntax and use a prefix like meta (as a strawman):
any Tis the associated existentialmeta Tis the metatype of Tany meta Tis the metatype of the associated existentialany Pis the existential for the protocolmeta Pis the protocol metatypeany meta Pis the metatype of the protocol existential
I realized after posting it that my approach to solving the nesting issue depended on the fact that the name of the existential type matches the name of the protocol (or the unbound name of a generic type for concrete type existentials). This is what made the P.NestedType or Array.NestedType syntax work.
With this prefix approach to existentials that would become (any P).NestedType or (any Array).NestedType which is not what we want when it comes to using types and protocols as namespaces. Maybe one option would be to use some on concrete types:
// We don't know what the type of `Element` is so any static members put in this
// extension are available using `Array.NestedType`, `Array.constant`, etc syntax.
// (as well as being available as `Array<Int>.NestedType`, etc
extension some Array {}