I know this is an old thread, but I happened to come across it and wanted to add my .02 cents. I recently bought a car from a smoker. I think the smoke odor can be majorly reduced but it is a LOT of work.
I bought a 2000 Integra almost a year ago. I started the cleaning by having the carpets extracted and an ozone treatment. The lingering smell of the ozone treatment masked the smell of smoke for about 2 months and then one day after the car was sitting in the sun, the car had a smell of smoke in it. So I proceeded to tear the car apart. I removed every trim piece from the hatch, where I found a bunch of cigarette ashes. I removed the guage assembly from the dash, where I found a bunch of ashes. I removed the armrest assembly and all other plastic dash pieces near the radio. They all had a cigarette odor to them. I scrubbed and scrubbed with vinyl cleaner and then with Carpet Fresh (don't ask), using a vinyl scrub brush. That pretty much removed the odor from those pieces. As others have said you have to scrubb the headliner, doors, seats, just about every square inch. I found that the rubber trim piece around the opening to the sunroof also could be removed and cleaned. The area around the sunroof had a really bad odor to it. Be sure to clean that too. Just about every square inch of the car needs to be scrubbed and cleaned good.
I'll never buy a car that was smoked in again. It's just too much work.