My girlfriends car was previously owned by a smoker.
She got the smell out by Febreze-ing all the non-leather surfaces every time she got in the car and always driving with the windows down. At first it just kind of masked the smell, but over time the smoke smell dissipated and is now completely gone.
Probably not the most effective way but it did work.
The headliner typically holds most of the smell so concentrate on that.