I am not sure I understand why IteratorEltype() is needed. Every iterable is guaranteed to produce objects of type Any, so if you don't know any better then you can always default to that. What is the point of distinguishing between "I know it could be anything" (IteratorEltype == HasEltype && eltype = Any) and "I don't know what it is, hence it could be anything" (IteratorEltype == EltypeUnknown)?
The only type in Base Julia which uses EltypeUnknown() I could find is Generator, which is the tool behind the (f(i) for i in iter) syntax. I can imagine that it is hard / impossible to find the eltype of such a generator if eltype(iter) is a non-leaf type, but what is the advantage of not simply setting the eltype to Any in this case? Of course, you wouldn't want it to be Any if eltype(iter) is a leaf-type and f is type-stable, but those two cases should be distinguishable at compile-time.