Say you have two classes, A and B. You have an operation that uses both of them. You can declare A::func(B) or B::func(A) but this couples the classes together. Yuckko.
So you just make a global function, func(A, B). The function gets its job done using public methods, and the classes remain unaware of each other.
That's the foot in the door. Then you whip multidispatch and CLOS on 'em and watch their eyes get real wide :-)