Completely flat design has no sense of layers or depth. This is important because users need to know where they are at any given time within your application, they will feel lost otherwise.
Completely flat design is also flawed when it comes to call to actions and various controls. Sure, a big red button in a sea of gray stands out, even if flat. The problem is when you can't have just one big red button (or you don't want a rainbow of buttons, which will look awful). You need your call to actions to stand out, and a perfect method of doing this is by giving said button depth or weight. It suddenly stands out from the flat design around it.