The average programmer never needs look past an instance's class and discover that a class object has a class. It can be useful, however, to your non-average programmer who wants more control over the runtime environment. Classes with only one instance may not be a problem. Classes may not be necessary just as any abstraction is not necessary. List three such problems with Self.
Classes provide a structured way to organize code.
This is one of many options available to a Self programmer. Encapsulation is worse than in Smalltalk. Good development environments necessary. It will be harder to envision how an object relates to others except by inspecting objects in an image. With class-based languages, however, a good sense of a system's organization can be obtained from looking at a static class hierarchy.