You can use metadata for the specific example you have.
(defn my-range
([] (my-range 0))
([n] (with-meta
(cons n (lazy-seq (my-range (inc n))))
{:onlyincreases true})))
(defn my-min [x] (if (:onlyincreases (meta x)) (first x) (min x)))
(my-min (my-range)) ;; => 0
(my-min (next (my-range))) ;; => 1
(my-min (nnext (my-range))) ;; => 2
If you need something more generalized, you might have to look into creating your own type.