It sounds like what you want is to have the end user perform a long running operation, and then update the current page (without making a full page request) with the results of that long running query. The SPLongOperation does a somewhat simplified version of this without implementing the full pattern. (Essentially the only thing it lets you do when the task completes is redirect, but it still has the client page do something when a long running server task finishes, which is no trivial task.)
Here is an example of the more generalized case. It demonstrates creating a page, starting an asynchronous task on the server, and then updating the client page (using AJAX, meaning without a full page reload) with the results of that asynchronous task. It can be used to update as you go (i.e. a progress bar) and/or when you're done (with the final results).
It's worth mentioning that you are fighting against the nature of HTTP and the standard browser framework to do this. Since you need to send a request to the client to give them an initial page, you force the client code to continually poll the server essentially asking "Are you done yet?", "Are you done yet?", or possibly, "What's your progress now?", "What's your progress now?" This can add up to a lot of network traffic which can put a strain on both the client, and the server, so it probably shouldn't be used for very, very long running tasks, or on pages that will have a lot of users. (It does seem quite slick when you get it working though ;)