The reason is that retrieving the search results is potentially slow, so the results page returns the header chunk of the page immediately to the browser with ns_write to provide visual feedback to the user. Otherwise the user wouldn't see anything until all results are returned and rendered by the templating system.
I think there is an easy way around this though, which would both render the page with the appropriate template and still return the first part of it immediately. It would simply need to call adp_parse with a separator string in the place of the search results, split the return value of adp_parse by the separator string and return the chunks with ns_write (storing the footer until the results are finished). If I have time someday I'll try to make that change.