<p>Classes that use other classes (as members, or as arguments to methods) need instances that behave properly for unit test. If you have these classes available and they introduce no additional dependencies, isn't it better to use the real thing instead of a mock? </p>

It is fine to use the "real thing" as long as you have absolute control over the object.  For example if you have an object that just has properties and accessors you're probably fine.  If there is logic in the object you want to use, you could run into problems.
If a unit test for class a uses an instance of class b and an change introduced to b breaks b, then the tests for class a are also broken.  This is where you can run into problems where as with a mock object you could always return the correct value.  Using "the real thing"  Can kind of convolute tests and hide the real problem.
Mocks can have downsides too, I think there is a balance with some mocks and some real objects you will have to find for yourself.