There were design issues with puppet that could only be code-mached over. I tried implementing 3 'providers' for puppet about a year ago and hit really simple issues that should not exist in even mediocre software.
Yeah. There are some things in Puppet that are shockingly convoluted. A lot of the system needs a rewrite but it's not possible to do that without significantly breaking backward compatibility - and I found that every bug is considered a feature by somebody, and they are using them in production, on purpose.