Do Lisp macros truly let you extend the language or do they let you rename already existing functionality?
C has object systems and the ability to embed other languages.
Brainfuck isn't suboptimal because of a lack of functionality or, in the words of Minsky, "strange limitations". It is suboptimal because it has intentionally annoying syntax.