Jumping back a few posts...
 As their link will be static (e.g. "/pvt/home") we can
 compare directly with "ad_conn url" I think ?
Right.  Note that /pvt/home is specified by the HomeURL kernel parameter.  So the check could be done against the parameter value instead of the hardcoded string "/pvt/home".  Email me if you have any question about how to do the lookup.
 I've seen that some files are available directly (/www
 and /packages/acs-subsite/www for example). Where part of
 the documentation decribes what pages are or aren't
  accessible ? Is it part of the request pre-processor,
 or something else ?
It's part of the request processor (RP), and should be documented there.  If not there's always the source code 😊  Here's how it works though:
a) The RP looks for a matching file under /www and will use it if it finds one.
b) If it doesn't find one, it climbs up the URL looking for a site node that matches.  Then it looks in the www subdirectory for the package that is mounted there and tries to find a match.
There are some other tricks as well.  For example URLs that start with /resources are treated specially for performance.  /resources/package-key maps to package-key/www/resources.  There are also "virtual url handler" or .vuh files that can process all URLs under their root.  It's neat stuff!
-> Is it possible to use a portlet in a "standard OpenACS pages" ?
Sounds like it would be a bit of a hack, but it should be possible.  One issue is how to get hold of the element_id.  You might take a look at "magic objects", e.g. the acs__magic_object_id() database function.