When you hire a contractor to redo your kitchen, do you ask how long it may take? When you order food online, do you expect to know when it will arrive? When you go to your mechanic for a repair, do you want to know when you may get your car back? When you go to a lawyer to verify a contract, do you need to know when they will be done? Why should building a software solution be any different?
They also all suffer from estimation issues in practice. Luckily these constraints set a limit on how much a competent professional can underestimate the project.
If you're asking someone to install or update some software they've installed before on a similar system, they should be able to give you a solid estimate. This has parallels with many of the services you mentioned.
If you're asking them to research, develop and test entirely new components, which is the basis of software engineering (an engineer does more than install and update packages), you should be able to understand why this is different than delivering food.