Starting from C++14 we have that:

A value-initialized ForwardIterator behaves like the past-the-end iterator of some unspecified empty container: it compares equal to all value-initialized ForwardIterators of the same type.

This answer on SO explains this well:

Forward iterators and stronger are generally just a lightweight handle onto something else (e.g. a pointer to an element or a node in a container) and so there is little reason not to require that they can be default constructed

I would say that this has also to do with the notion of regular types, as well as the inconvenience of checking at run-time for a sentinel value.