Here's how I've been doing it: tell the prospective client a maximum number of hours you expect the project will require. Then, when the job's done, charge them according to actual hours worked, up to your stated max. You may end up billing less than the actual number of hours worked; or, if it's the other way around, and you've come in under budget, you have the option of billing them less than they expect, which could help in long-term
PR.
Of course, it's fine to just price the project as a package, but with anything that involves design so many factors are subjective that things can get dicey pretty quick. Even with my method as described, the key is not to underprice from the start; ask for more than you really think you'll need, because the range of possible client maintenance is infinite.