Non of that features solve the full set of issues you can solve with generic protocols. One of that is multiple conformances to the same generic protocol but with different generic paramaters. PATs cannot and will not solve that issue, nor will generalized existentials or opaque types. To be able to truly go out generically, the language must allow us to express such generic features, but right now it doesn't, which lead to a lot of duplicate non-generic code.
I cannot provide you concrete examples here, since this feature is not supported and such code simply does not exist in my code base, because I cannot write it and had to fall back to other techniques and bend the compiler as much as it currently allows me to.
That is true in general, but that is not the point I was making. By private storage I meant that you don't have to expose it at all, not even for sub-classes. You cannot not do this with protocols right now, and not sure if we ever will be able to do that.