Helm is very powerful, and like any powerful tool, it can be unwieldy and overly complex for your use case. Another big disadvantage (that I hinted at earlier), imo is that Go Template language kinda sucks and support for it in an IDE is really limited. You can write invalid templates all day long and your IDE won't be smart enough to tell you that you suck.
That being said, Helm allows you to write very DRY code and have a single very flexible org wide chart that can be used with any microservice. You also have the ability to wrap charts into one big chart of sub charts. What I like about this approach is that it allows you to write services in a non monolithic way while ensuring that there has never been an untested configuration on your cluster.
One big problem is that integration and e2e tests, etc. test your cluster at a certain configuration. If you deploy to production and you find that you need to roll back something, you need to know that the configuration you roll back to has been thoroughly vetted at some time... otherwise, you're just trading a known issue for an unknown one. In practice I've seen this often results in reluctance to rollback and have a "forward only" mentality. Therefore, I prefer to treat my deployment artifacts as single vetted objects, not a series of objects. Helm makes it incredibly easy to
You can absolutely do the same thing with kustomize... it just gets a bit harder to manage, imo.