I mostly write C and C++ code these days, but I've worked a lot with guys using Simulink and Labview. Both are good tools, but like any "programming" language, there are issues. Some of them stem from the lack of software processes being used by people who have never been exposed to a typical software development process. Simple things like version control, or "code" reviews. My experience with Labview in particular, is that the ease of changing the graphical representation encourages people to quickly tweak something to make it work. I've ended up in the situation where I asked what they changed to make it work, and they can't tell me. This is as much a lack of rigor in the process as it is in the people using the tool. They can often do amazing things, and quickly, but they tend to be difficult to maintain.
My experience with Simulink is a little different. The guys working with Simulink tend to be domain experts, often with PhDs. They really know their stuff. When they can generate a good model of the system they can do AMAZING things. The downside is you can spend millions of dollars developing and validating the system models. It is why you see Simulink used in projects with tough control systems problems, which coincidentally often have large budgets, like the automotive world.
Sometimes, the code generated by SImulink isn't efficient, which can drive up memory/CPU costs. When you are shipping hundreds of thousands or millions of a product a year, adding a few cents per unit really adds up. Sometimes the cost of spending an extra million or two writing the code in C(or optimizing the Simulink after the fact) is worth the expense. My opinion is that tools like Simulink will eventually take over the control systems market.
Another reason is cost. You can get a C compiler for free. Matlab/Simulink is a 6-figure expense per developer. Labview isn't that expensive, but it is still not cheap.