I think you make some good points here. I have been using Julia for quite a while now and I think I can add to this conversation a bit. I also write both Julia and Python everyday, so I understand the ecosystems and uses for both languages.
You really did hit the nail on the head when it comes to Julia being a great language for NEW ML infrastructure vs. old.
Whenever you use Julia, it just stays out of the way. That's what I love about it. Say I want to do x or y with my type, there is usually a way to do it.
I also think they have a much more robust base when it comes to debugging. This is to say I feel like exit codes are more explanatory, which is good in a high-level language. I also just think polymorphism is superior, which might be a bit bias, but it's not like we are data scientists or anything crazy like that, so bias definitely does not matter.
Anyway, another thing I would like to say is that I personally would not say Julia is between C++ and Java, in terms of speed, as it is more in between C and C++ in all honesty. Here are some benchmarks published by Julia Computing:
https://julialang.org/benchmarks/
I think the point here is that Julia can do more than one thing. It's not a one-trick pony. If one wants to type it like Python, then they can type it like Python and the language will work in that high-level margin. The language is manipulatable like that, you can even make it object-oriented.
However, Julia can also do things that one might expect from different languages and programming paradigms. there are procedural, imperative, and functional features in Julia. I would even say object-oriented generics in the form of parametric polymorphism.
It's a very " write how you want to write" sort of language.