If descriptors didn't exist in the language, classmethod, staticmethod, and property would become keywords. Languages like Java and C++ already have static as a keyword; C++ also made its type system have a special pointer to member type; such behavior can be hardcoded without having a flexible descriptor mechanism.
Custom method lookup would just be the same as custom attributes, that is, by the user overriding __getattr__.
Custom method lookup would just be the same as custom attributes, that is, by the user overriding __getattr__.