Hi, Brett. First, let me add my vote to the group of people who prefer to do this manually. But I will try to offer workarounds.
Before going to the workarounds, please consider the possibility of using it as it was intended. At the end of every project I find a need to stop and reflect. Did the project achieve its objective? Is there any followup that I should be adding to my task list? Did I learn anything that needs to be reflected in my other tasks and projects? Are there any issues with billing or collections? Are there any resources obtained for the project that need to be returned or released? have the files been archived? I could add each of these checks explicitly but instead I consider them when the project's tasks are done and I'm ready to mark the project completed. Do you have tasks like these at the end of your projects? If so, you could consider dropping them and doing these checks as a part of the project closure.
OK, workarounds
The most common and easiest one is to make the project a folder. You rejected that option because it would not be a project any more. Not true, As long as the checkmark for "This is a project" remains checked it will continue to be a project, with the project completion bar and everything. The only thing is that a folder cannot be marked completed, so it will never be archived.
The other workaround is to mark the project as a recurring project. In the advanced options for recurrence mark it to reoccur whenever all subtracts are completed. And one more thing, set it to end after zero recurrences. This pretty much sets up the situation that I think you are looking for, after the last subtask is marked completed the project will automatically try to reoccur, but will not reoccur because it has already reached the maximum reocurrences (zero) and will therefore be marked completed. The drawback of this approach is that the work involved in setting it up is way more than the work involved in just checking off the project at the end. But you could set it up like this once and then save it as a template, and then whenever you are creating a new project you could create it from the template and it will inherit this behaviour of closing after the last subtask is done.
-Dwight