Each instance has it's own micro-culture and history (someone may have really messed things up before) but ultimately I think it has to do with control and trust. Enterprises are made up of people after all and people have egos. Often times, those people who have desk jobs also suffer from poor self-esteem. My experience has been that higher ups that like to look over the heads of subordinates do so to remind them who is in charge. Developers usually have an in-depth hold on the minutia and nuanced technical details of a project or requirement that can intimidate (or challenge?) the claim to authority that higher ups may hold. After all, it's difficult to make informed decisions when those below you seem to know more about the problem and solutions than you do.
Change? Solutions are almost universally as complex as problems so it's not easy to say. However, I'd venture to say that communication is the way to go. Developers need to band together and discuss these problems with each other so we don't feel isolated and succumb to group think. Then, we also need to empathize with superiors by realizing the pressures that they feel and try to remove those pressures from our end as best we can while communicating reasons for why we would advocate for something. Anyway, just off the cuff....