If you want to force a list output, you can change the Statistics`BinningDump`$binOpts to have the "SparseThreshold" option be zero:
BinCounts[RandomReal[{1, 10000}, 1000]]
(* SparseArray[ ... ] *)
Block[{Statistics`BinningDump`$binOpts = {"BinClosure" -> Left,
"SparseThreshold" -> 0.}},
BinCounts[RandomReal[{1, 10000}, 1000]]]
(* { ... } *)
or simply apply Normal to your output.
Unfortunately, you cannot force the output to be a SparseArray, because the code will convert it to a list if the density of the result is larger than 0.8. But since SparseArray is idempotent, you can just apply it to the BinCounts:
BinCounts[RandomReal[{1, 100}, 1000]]
(* { ... } *)
SparseArray@BinCounts[RandomReal[{1, 100}, 1000]]
(* SparseArray[ ... ] *)