The main difference is the purpose of the account, so it's primarily a useful distinction for administrators and auditors. There are a few technical differences — from the [`adduser`](http://linux.die.net/man/8/adduser) documentation:

> System users will be created with no aging information in `/etc/shadow`, and their numeric identifiers are chosen in the `SYS_UID_MIN`–`SYS_UID_MAX` range, defined in `/etc/login.defs`, instead of `UID_MIN`–`UID_MAX` (and their GID counterparts for the creation of groups).

As far as I can tell (I don't know Puppet), the difference from Puppet's perspective is whether it passes the `-r` option to `adduser`.

For a broader perspective, see http://unix.stackexchange.com/questions/74809/how-to-list-all-daemon-users/74898#74898