That is correct, add_self_to_page is not directly generically callable.
The non-generic add_self_to_page procs are wrapped, in dotlrn, by
add_portlet_helper procs which are called generically when templates
are created. then they are called again in the add_applet_to_community
and add_user_to_community procs which fill in the parameters with
their correct values.
i can only think of one place where you would want to call
add_self_to_page procs generically (where the elements are there but
filled with non-working values): when creating templates. there could
be others, but i can't think of any right now. so, while this should
be cleaned up in a future release, i don't see it as a major concern
for the present.
the datasource contract is still useful even if add_self_to_page procs
cannot be called generically. other procs in the contract are called
generically by the code e.g. "Show" and "GetPrettyName".