Preventing rp_serve_abstract_file from setting ad_conn file won't work, because at least the handler that gets called for tcl/adp files seems to rely on that setting to point to an actual file.
All that rp_serve_abstract_file actually does is trying to map a concrete file to the url, set the result in ad_conn file and call rp_serve_concrete_file.
rp_serve_concrete_file then looks at the extension of the concrete file and decides which handler to call that actually processes the file (or returns the file itself when there is no handler registered for that type). In the case of a .tcl file the handler is adp_parse_ad_conn_file, which mainly does this: [template::adp_parse [file root [ad_conn file]] {}] and ns_return's the result (like the working suggestion from above).
What do you think of the following approach for creating ad_internal_redirect: introduce a way to tell the rp_handler to skip step number 9, so that it never caches file-url mappings when we don't want it to? This could be done by doing something like "ad_conn -set skip_url2file_cache_p 1" before calling rp_serve_abstract_file, and modifying rp_handler accordingly.