Rather than reaching inside the object and grabbing some attribute of its internal state, you can get an understanding of its current state based on its behavior. For example, if you can observe a car is skidding to a stop by looking at it, you can intuit that the brakes are currently being applied without having to peek inside the car to see that the brake pedal is currently being stomped on by a very scared driver.
You could tell when the Pentagon was preparing for war without looking inside by noticing a significant increase in the number of pizza deliveries.
In software, this means looking at the messages an object sends and using them to determine its internal state.
"the separation will allow you to make radical changes to the implementation of the code without changing the tests.
It's the same argument that people use for not testing private methods... refactorability.
This can facilitate writing tests, because it doesn't force you to think about implementation details yet:
"When I add a new requirement to this module, I can add it as a test at the higher-level scope. When specifying the new test, I don't need to know how it's going to be implemented. It's a huge win, as I'm not blocked with the implementation structure yet. Writing the test is decoupled from the implementation details."