I believe it's important to remind a customer that what you provide is an estimate and that there is always the possibility that one might run into unexpected problems. I would definitely show them an estimation document and this estimation document would explicitly describe what I am estimating. Anything not included in the estimation document would not be included in the estimate. Obviously it's in your best interest to list everything you expect to spend time on and to include everything that must be done.
A long list can be helpful for convincing a client to recognize the real scope of what they ask. It can also motivate them to point out things they expect to be done and in that capacity it can really help you come to an understanding with your client about what needs to be done. Typical things that fail to get discussed in the estimation phase are discovery [e.g., learning how the client's old system works], testing [think your software is going to be bug-free right out of the gate?], migration or go-live processes [e.g., moving DNS to a new server, updating a live database, etc.].
The downside of a detailed estimate is that it takes time to build it. Your time and their time. I would recommend wowing them with your expertise in an initial meeting where you listen to their problems, describe what they tell you in your own words to get it straight, and then offer a variety of solutions to their problem and explain the tradeoffs of each. If they seem suitably impressed, I would hit them up for a discovery/estimation phase where you design their solution and create estimates for project completion.