I've wondered about this myself. Consider two independent projects, "Widget Factory" and "Wombat Framework" that each develop directive x. It's preferred practice to prefix directive names to avoid namespace conflicts, but in this case, each might still end up defining a wf-x.
What happens if I use <div wf-x="something"></div> in an application containing both modules? Interestingly, angular will attach both, linking each in descending priority order. But the odds of this producing a correct result are low. Angular will raise an error if both directives try to add a controller, and the semantics of the two directives and what they expect for the value of the attribute and structure of the element could easily conflict with one another.
In XML, this problem is solved with namespaces. <div xmlns:wf1="..." wf1:x="something"></div> or <wf1:x xmlns:wf1="..."></wf1:x> aren't pretty, but they clearly describe which directive we intend to use.
Why doesn't angular support this? XML namespaces are uncommon and may not be well-supported in general HTML, and there may be technical challenges with parsing. Directives are supported in comments and CSS classes as well as elements and attributes, and : would have to be mangled somehow in a class name. The simplest answer though may be that it's not a common enough problem yet to require anything more advanced than the prefixes we see in use today. It should be noted that angular's current approach is the one recommended by Web Components. As that standard evolves, I would expect angular to track it. There's some discussion on this topic in the Polymer group as well.