First of all, as a developer I never do this. If a client suggests an inefficient or incorrect app architecture, then I will always say something. However, I have seen this pattern firsthand and I've read discussions.
Here's how this plays out. A non-programmer needs software built and a lot of the time they love to do the architecture. They suggest a setup that is completely off the mark and will increase costs by 5x. As a developer do you say something or do you stay quiet and take the extra work and job security?
Yesterday I wrote about such a situation. The developer that attempted the project before me and used the client's architecture made 20x what I did. I wonder if he knew of the poor architecture and saw the opportunity, or if he was simply a novice developer.
I've read discussions online where developers say they structure things as their clients suggest and don't make any recommendations even though they see issues.
I imagine that sometimes programmers cannot say much due to politics. But I wonder how many programmers that find themselves in such a situation that can say something, actually do say something.
Another reason I don't do this is because I want to always be solving new problems and I don't want to muck around in a poorly architected app for 15% of my career.
If the customer is 'difficult', it often helps to make early mock-ups of the desired software. One that is like the customer wanted it and the other like you find it ideal. By "using" or seeing the mock-up, it often helps the customer understand why his/her approach might be flawed.