Octavo
Illuminator
This problem is not unique to software development.
Accurate estimation takes some work defining parts of the system. When the estimate is done, double it, then you have an estimation that is probably somewhat realistic. Every time a vice president or director opens their mouth to contribute add another day.
I've heard and used the old, (estimate * 2) + 10 with very mixed results. Story estimation still wins hands down for me.
The historical solution to terrible working conditions and hours has been to form a union. Which considering the independent nature of many geeks, will be like herding cats. Good luck.
Indeed. I'm not particularly keen on the notions of unions anyway

Good thing I'm not saying that. What I am saying is that one cannot declare it unethical on the basis of what one personally finds reprehensible. Well, you can, but it won't do anything, and there is a time after early adulthood when the ego boo from futile exercises loses its idealistic appeal.
Ethics is a code of behavior.
Now, if you have some sort of plan to change the ethics that are practiced, then I'm all ears. Without that, it's just a fart in a hurricane to say it's unethical. I don't have a plan apart from 1) voting against Republicans, and 2) finding ways to put these schmucks out of business. The trouble is that 1 is extremely difficult, given A) redistricting, B) big money, and C) the tendency of progressives to boycott elections so that they can stay home and smell their own farts.
Well, the OP did contain an invitation to speculate on how we could fix the situation. I'm afraid it was written mostly as a rant to get some things off my chest. I don't think the situation is going to change any time soon - it's just so damn frustrating that it keeps happening.
In general, driving software engineers to work in this way decreases long-run total productivity because more mistakes are made and poorly structured quick-and-dirty code is developed. Beyond some point, it even decreases total short-term productivity (they work more hours and get less done), but they do it anyway.
I'm in a somewhat unique position in that I've been developing the same software project for almost twenty years, and I hope to continue for many more years. I write code with a very long view, because I know I need to maintain it for a long time. And after all those years, I've learned to give fairly realistic deadlines. When it is useful to push for a deadline, I know that working long hours only helps for a short time.
That's awesome Modified - I'm glad for you. Part of why this makes me so agitated is not only the unfairness of the situation or that it keeps recurring, but exactly as you stated, in the long-term it's self defeating.
Our hypothetical service X has been developed in such a rush, that the next poor soul who has to maintain it is going to think the dev team were a bunch of incompetent morons.