Vincent,
you create groups A, B, and C using the groups admin UI. Group D you don't need to create, it is already predefined in the system, you have both "the_public", and "registered_users" to choose from (retrive the group id:s with Tcl proc acs_magic_object).
Grant admin on a package by clicking on the "set permissions" link for the package in the site-map admin UI (/admin/site-map) and granting the admin privilege to the appropriate group.
You must be site-wide admin to let self-registered users into the system or create new users. One approach to the member feature is to build your own admin UI in your package. Each package needs to have a member group and you could create an admin_members privilege that you would grant to the groups that are supposed to be able to add members to a package.
Remember that you can also nest groups. For example the member group for a package could have a sub group for admins. That way if a user is in the admin group of a package he is automatically also in the member group.
Hope this helps you along.
/Peter