Seem to me that Python has won. What I mean by that is that it is used almost everywhere and there is almost no compelling reason to use anything else. You want web? Django, plus a million other frameworks, all well tested and documented. Machine learning? Tensorflow, Keras or PyTorch. Scientific computing? Numpy.
For the last two decades people have complained about (C)Python not being multi-threaded, not jitted, not having tco, being to simplistic and so on. In practice it seem to have mattered very little. For the applications where it do matter, like if you are writing your own language vm, compiler (but see PyPy) or garbage collector, you have to ask "Yes, ok, but how often do you do that?"
There are plenty of compelling reasons to use other languages. Macros, types, threads, interfaces, lambdas, tail calls etc.
But what matters in this world is short term profit. Python is easy to get started with, has a ton of frameworks than can be duct taped into semi-working software by mostly anyone and is taught in many schools.
The majority of the people in the world that can benefit from writing computer programs for the most various purposes are not professionals, nor desire to be.
Computation is a powerful tool wide incredibly wide applications, and Python makes this tool accessible to humanity in general. That is no small thing.
Macros, types, threads, interfaces, lambdas, tail calls, etc. are incredibly niche interests, and perfectly unnecessary for the vast majority of computations that people would like to perform.
While python does lack in many areas i think your list is a bit off. For macros, Python is one of the most meta-programmable language ever (for better or worse). Types, interfaces and lambdas exist. Threads also, caveat GIL, but also multiprocessing.
One exception is GUI applications. There are Python bindings to popular GUI frameworks but my experience it doesn't always feel like 100% pythonic. Python is not perfect choice if you want to deploy your application as binary. Actually it is downside of all interpreted languages.
For the last two decades people have complained about (C)Python not being multi-threaded, not jitted, not having tco, being to simplistic and so on. In practice it seem to have mattered very little. For the applications where it do matter, like if you are writing your own language vm, compiler (but see PyPy) or garbage collector, you have to ask "Yes, ok, but how often do you do that?"