Objects Are Not Abstract Data Types
stuartsierra.com
stuartsierra.com
This is why I prefer C to C++. An opaque data type in C has a clean separation of the interface from the implementation. C++ classes tend to have both methods and implementation-dependent data specified in a single file. Granted, one can write good or bad code in any language, but I've found C encourages good behavior in this regard more than C++.
However, as you've said, C++ encourages you to use its badly-thought-out class abstractions, and that's what most people who "code C++" tend to know how to do. Linus, I believe, disallowed C++ specifically because people would gradually write the kernel into a maintainability corner, by modeling things as hierarchies of classes without understanding the implications.
1. Clojure already provides multimethods, which can dispatch CLOS-style, based on number/type of their arguments, or by an arbitrary predicate.
2. To use your wording, while CLOS separates methods from "everything", Clojure multimethods are even separated from classes. Other than being type-aware enough to do dispatch, multimethods are conceptually just functions with some extra testing on the front end.
3. Implementation-wise, things seem to be different. Perusing the links below, it seems the new functionality is intended to preserve dynamism/performance when Java and Clojure objects interact.
4. Grouping functions into logical chunks seems to be the other idea behind protocols.