Hey Andy,
It has not been brought up yet but it is something I consider when working on the patch. I actually started writing a new provider for this using the current useradd/groupadd providers as parent classes and quickly abandoned it because I realized I was duplicating so much code. Another, probably more considerable, reason is that I don't see people actually wanting to use a full blown libuser provider because of some of the limitations of the commands. Take for example the libuser commands do not have the ability to manage multiple group membership of users. In my current patch, changes to an existing user continue to use the usermod commands which support this and in the case of a new users luseradd is used to create the user and then a subsequent call is made to usermod to synchronize the group membership appropriately. If I were to still provide this capability in the libuser provider I would have to call the usermod command instead of the lusermod command. This put me in the same situation but in reverse order. I'd be using a libuser provider to execute shadow-utils commands where in I'm currently using a shadow-utils provider to execute libuser commands.
Working on this I have found that in order to get the maximum benefit out of the user type a single provider combining the use of shadow-utils commands and libuser commands is needed.
To summaraize:
Without the libuser commands the shadow-utils providers cannot always manage local accounts.
Without the shadow-utils commands the libuser providers would not be able to manage all of the attributes of accounts.
In response to your question about libuser.conf. The values of those should never change, the intent is not to expose the use of libuser commands to the user but to force specific behavior of the user type when a user sets forcelocal => true.
The only part of the config file that actually gets used is the "create_module: files shadow" I didn't test a config without the other settings, I suppose I could do that to shrink the file size.