[ 2014-02-08: Daniel responds to Beman ]
The difference in return types becomes relevant, when testing whether e.g. directory_iterator would satisfy the Traversable requirements as currently specified in N3763. Expressed in code form these requirements impose that the following assertion holds:
static_assert(std::is_same< decltype(std::range_begin(std::declval<directory_iterator>())), decltype(std::range_end(std::declval<directory_iterator>())) >::value, "No Traversable type");
Both directory_iterator and recursive_directory_iterator won't satisfy this requirement currently.