Well, there are cases where private inheritance is mandatory, compared to composition. Keeping in the mindset that private inheritance means "is implemented in terms of":

What if the object you are "implementing in terms of" can be customized by overiding a private virtual function?

What if you want your object to be "implemented in terms of" two different classes, both of which virtually derive from the same base class (the dreaded diamond)?

Now, we could argue that any application that does this might best be purged in fire along with all the hardware it has ever touched, but still. Private inheritance can give you more functionality than can be obtained through composition alone.

Composition is probably easier and safer, but just like the pointer vs reference idiom "References when you can, pointers when you must".