I would say that while all of those technologies were certainly crucial to making Julia fast, none of them are magic. There are projects to get other dynamic languages using LLVM's JIT, including Python and R.
So what makes Julia fast?
Language design.
Julia was designed from the beginning to have certain features that are necessary for high performance: type stability, pervasive type inference, execution semantics that closely match the hardware capabilities (pass-by-sharing, machine arithmetic), inlining, and macros.
Additionally, certain oft-requested features were not included which make high performance much more difficult – or impossible – to achieve. These include: pass-by-copy, first class local namespaces (aka eval in function scope). Leaving out other features, such as making everything callable and allowing overloading of the getfield function (a.b access), while not essential to providing performance since they could be similarly optimized, have not been implemented since they might detract from the performance.