It seems that both of these are lazy and allow you to keep returning elements to your heart's content. What's the difference between the two?
This thread in the Scala mailing list goes into some detail to answer your question. To excerpt the most relevant part, Tony Morris says:
One is pure, the other is imperative (Iterator). You might notice that Iterator.next is side-effecting. Imagine changing its next method to return a tuple containing an Iterator instead. i.e. instead of returning a T (for Iterator[T]), it returns a (T, Iterator[T]).
What do we have now? A stream! next._1 is head and next._2 is tail.
A better question might be "why bother having Iterators (or imperative constructs)?". I suspect the answer has something to do with Java and targetting the JVM i.e. a flawed premise.
Stream memoises and Iterator does not. You can traverse the same Stream multiple times and get the same result each time. Iterator, on the other hand, can only be traversed once.