There's a major difference in philosophy in that much of the high-level functionality in Mathematica is hidden in internal logic that is deliberately difficult for users to dive into. For example, from http://reference.wolfram.com/mathematica/tutorial/SomeNotesOnInternalImplementation.html#3826, "The code for NDSolve and related functions is about 1400 pages long." Profiling the choices Mathematica's Kernel decides to make when executing your code is almost impossible. It has some great well-developed algorithms all built in, but you have to trust it's making the best decisions automatically or do your best to find the limited set of options available to try to guide its behavior.
On the flipside, and this isn't a language feature as much as a very well-implemented functionality, is Manipulate[]. It is wonderfully simple to set up and deploy interactive data exploration using Mathematica - dragging a few sliders around can be a great way to explore parametric sensitivities in some problems. If you've never seen this in action before, have a look around demonstrations.wolfram.com for some examples. Julia has some catching up to do here, but I'm confident it will happen in time.
