Which is sort of why I think designer who can implement design (in HTML/CSS/JS or iOS/Android) is ideal, as they are much more likely to have that sort of "product architecture" thought process; and being as closed as possible to the code which means it becomes easier to adapt the design.
Personally like Ryan Singer's approach to designing as he jumps back and fourth between HTML and Photoshop (https://vimeo.com/16814487), the design gets much closer to reality.
That's exactly the point. Assuming your product will be used by humans, a designer (a real designer; not a dribbbler pixel-pusher) is way better equipped - in terms of methods for understanding users and context - than a engineer or a manager.
Another difficulty is that much good design is obvious in hindsight, think iPad but the act of whittling away what is unimportant is a key part of the job.
Or yeah maybe you've just dealt with poor designers.
Designers are often pushed into the rear end of the process in every sort of consumer product development (including software development). It is no wonder therefore that we end up with not only ugly but often unusable products. Big opportunities all around for a company that brings good design and better designers to the forefront of product development.
But it is just too damn hard for most people to let go of their ego where design is concerned. The whole design thing looks so intuitive and apparent right from the start that we can't believe we can't do it all ourselves, and, not only that, do it better that everybody else.