The way FogBugz handles this sort of thing is by first planing out all of the tasks that are needed in a project, and then deducting time from the estimate as things get worked on. These estimates are agregated up the sub-case tree, and are also summed up at the bottom of a case list page.
So, for example, say you had a project to add a Foo to the application. What we do here is plan out all of the things that have to happen in order for this project to be complete (all the work that needs to be done, and we might even include meetings if we are being picky about it)
Once we have the case hierarchy laid out, we assign each task to whomever will be responsible for it's completion, and then each user estimates how long they think each of their cases will take. (Cases that don't really have any work in them but are more of a tracking/meta-case don't get an estimate)
Then, once that's done, we have a fairly good idea of how long we think it will take just from looking at either the aggregate time estimate (if everything is under 1 case), or by looking at the summed estimated time if we have a case list with just those cases in it.
(If everything is in a project, the burn down chart can also give you an idea of how much time is remaining, and it also takes into account the users' estimation histories, so you can get a probabilistic idea of how much time is still remaining to be put into the project. If you then have the cases sorted into milestones and prioritized, you can even adjust those sliders to see how the time remaining is affected if you only to the most important things, etc.)
If you follow this method, you will be able to give your clients an idea up front about how long you think the project will take, and even sit down with them to re-prioritize things and show them how doing that will adjust the time needed for their project, including worst, best, and average case scenarios.
Update:
The next piece in the puzzle then, by the sound of it, would be for you to have your developers log their time against the cases they spend it on. You can then easily get the number of hours logged by having a filter with the cases for just the customer of interest, and then looking at the "Total Elapsed Time" in the summary table at the bottom of a Case List page. You will still have to do the subtraction of Hours Paid For - Elapsed Time to get the remaining hours, but this should get you most of the way there.