To add to Ivh's answer, the source code isn't too hard to follow here. Cursive makes this really easy because you can follow the source right into clojure.lang.RT, but you don't need to go that far to see how `reduced?` is used.
You can see that all implementations of `reduce` in clojure.core.protocols call `reduced?` to see if they should stop reducing. So, this is a convention that a reducing or transducing process needs to follow. If you ever need to write a function that takes a transducer, and which applies that transducer without simply calling `transduce` or friends, you'll also need to uphold that contract.
More here.
I thought I had found a nice application for `reduced?` outside this context, but alas it was not to be. I wanted to detect whether a `reduce` had terminated due to a condition being met or because it had exhausted the input collection, assuming that `reduced?` was checking for some metadata glued onto the value.
(reduced? (reduce #(if (= %2 5) (reduced %2) (+ %1 %2)) (range 1 10)))
=> false
The reason is that `reduced` wraps the value in a Reduced, which implements IDeref, and one must dereference it to obtain the wrapped value. The reducing / transducing processes not only must check for `reduced?` but they are also obliged to deref any such value that returns true for that check.
(reduced 5)
=> #object[clojure.lang.Reduced 0x471e4b70 {:status :ready, :val 5}]
So you really will never make use of `reduced?` unless you're *inside* an implementation of a reducing / transducing process. As Ivh already stated, extremely narrow-use :)