After RTFMing (https://openacs.org/doc/openacs-4/rp-design.html), I found a simple solution that does what I need (and most of what I want.)
So. Suppose you have a file /foo/bar.html and you move it to /baz/bar.html and you want old links to work. Create a new file /foo/bar.vuh with one line:
ad_returnredirect /baz/bar
This will return an HTTP 302, the browser will open the new file, and all of the links will work fine.
There was a bug with .vuh files called other than index.vuh (e.g. bar.vuh), which should be fixed in more recent versions, so beware if you run into that bug #23.