This is probably 10 months too late for you, but I just had the same conundrum. Here's the solution I came up with.
The easiest way to show a 404 page from an arbitrary point in your script would be to define the following function:
function return_404() {
status_header(404);
nocache_headers();
include( get_404_template() );
exit;
}
and then just call return_404() from wherever you need to. This should work as long as it is called before the headers are sent (I am personally using it on a template_redirect hook).
I basically copied the above from the same code WordPress uses to display a 404 page when a post is not found. This is as of 2.8, FYI.