My2c
You have different alternative choices on how to manage these configurations with Puppet.
With the defines nagios::contact and contactgroup you can create whatever number of contacts you want, and eventually parametrize them with some Foreman parameter.
Still you need to use these contacts somewhere, either in host/service templates or directly in the checks configurations, and here the matter becomes a bit variable, as it doesn't make sense to have a template for each contact(group) if they are many, and at the same time by default the checks configured by Puppet, in the example42 module, don't provide a parameter to manage directly contacts, so, somehow, using templates is currently the only available alternative.
al