An API designed for overriding still suffers from the same compromise. Any particular use case will want to override a specific set of functionality and nothing more. More fine grained overridability means more overhead complexity. Simplicity means you have to override functionality in large units, likely reimplementing most of it.