First problem can be fixed by turning on loop_context_vars and using the following:
<TMPL_VAR NAME=ID>: <TMPL_VAR NAME=NAME><br>
<TMPL_LOOP NAME=CATEGORIES>
<TMPL_VAR NAME=ID>/<TMPL_VAR NAME=TITLE><TMPL_UNLESS __last__> | </TMP
+L_UNLESS>
</TMPL_LOOP>
As for the second problem, I don't see another way around your problem beyond what you already have. The template is just presenting the data you gave it.
antirice
The first rule of Perl club is - use Perl
The ith rule of Perl club is - follow rule i - 1 for i > 1