The real point of Dahua's "Fast Numeric" blog post [1] is that you can devectorize in the high-level language if you need to, not that you always should. Most code is not a performance bottleneck and can use the most convenient form. In cases where you identify a real hotspot [2], in Matlab you'd have to resort to writing C code via MEX. In Julia, you do one or more of the following: (a) change some copying function to a mutating version by sticking a "!" on the end of it; (b) move an array allocation out of a loop and pass the pre-allocated array into a mutating function inside the loop; (c) manually devectorize some code if absolutely necessary – or use the Devectorize package to do it automatically. At no point do you ever have to resort to writing code in any other language.
Also keep in mind that slowness is not the only problem one encounters with numerical code – I've personally have much more frequent trouble with memory usage. I've written far too much insanely convoluted Matlab code to try to avoid blowing out the memory on a 100GB machine (or 1TB these days). It's generally just barely doable using find, sparse, sub2ind and ind2sub. If I had to resort to writing C code every time I encountered one of these memory problems, I would just write the damned thing in C and scrap Matlab altogether. On the other hand in Julia for such situations, I can just write a few for loops and not only do I avoid blowing out my memory, but the code gets faster too, and I'm never required to leave my high-level environment.