You both bring up very good points. Things are definitely complicated.
If you set up labels incorrectly or unintentionally give out privileges, you're exposing your system to similar attacks as in non-IFC systems. Importantly, however, the degree of an attack is usually less damaging. For example, if Alice gives out her privileges to some process, then the integrity of her data may be compromised, but the process cannot exfiltrate or corrupt Bob's data. More generally, IFC and capabilities let you compartmentalize your system in such a way that the compromise of one component will not take down the whole system.
You're absolutely right in saying that most of developers are going to write buggy and vulnerable code. So, how likely are you going to get the compartmentalization right? This is a hard problem and a topic that more recent research is trying to address.
Without going into details about this stuff (I can point you to some papers, if you're interested), I want to point out that even "vanilla" HiStar gives you an advantage: if you have a security expert on your team than can specify global policies correctly, IFC lets you execute arbitrary code without having to worry that the bugs/vulns in the code will cause massive damage. Hence, you can hire 1 good guy and 100 average developers.
Of course, depending on the scenario (e.g., web apps) this may not be good enough. As we'll see in 2 classes, the Hails paper precisely addresses this concern: can we build a framework that the average developer, who is not a security expert, can use? [Disclosure: I'm an author on this paper.]