This looks like a fun exercise, but ultimately it seems to just be reinventing Iterators except each step yields a new copy of the iterator instead of just mutating the existing iterator. The other difference is there's an explicit Skip, which I don't understand the point of because the next function could just be written as a loop until it either finishes or yields an element.
So this basically just seems to be "what if Iterator couldn't use &mut".
I think the point of the exercise is to start with streams as they are defined in Haskell and then gradually improve them, as an experiment or demonstration. The post is aimed at Haskell programmers who might be interested in Rust.
If the goal was to build efficient and flexible streams in Rust, then indeed, you wouldn't start like this.
So this basically just seems to be "what if Iterator couldn't use &mut".