After doing some experimentation, it seems like the problem definitely has to do with how the files are read on disk. When I put all of the encoding directives in nsd.tcl, I find that a windows-1255 file is sent to me as question marks, whereas a UTF-8 file is sent to me just fine.
So the HTTP encoding part is working without a hitch. It's the file-reading part that is breaking down, somehow expecting UTF-8 when I feed it windows-1255.
Maybe I just didn't modify the right part of acs-templating? But should I have to do this? Hmmm...