Could you please clarify then how would "abstract classes" solve these issues? Are you proposing to introduce multiple inheritance together with "abstract classes"? Or what do you mean here by "abstract types"? How would syntax for those look and how those would work with multiple inheritance?
If the storage is completely private then implementors of the protocol don't need to access it, right?
But I guess I see what you mean here. Not sure this is related to what we've discussed here in any way. It looks more like allowing users to define storage in extensions, which is currently discussed in a separate topic.