Most of the provisioning capabilities in tools like Chef, Puppet, etc. are pretty rudimentary from the perspective of thinking about infrastructure as composable services.
So, for example, a "knife ec2 server create" or a "puppet node_aws" will kick off an aws machine, but it's up to you to manually describe the metadata around that server - what AMI, what VPC, attached subnets, security groups, etc.
But really, that's not what you want, you don't want a server, you want a composed service. You want to describe the entire stack, and you want to be able to represent that stack as code, so it can be tested, version controlled, etc. just like all of your other infrastructure.
The chef guys have clearly recognized this, and have their chef-metal project, which frankly seems like a bit of an ugly hack to get around the limitation that most config management tools have where all of the execution is on a target node (whereas with composable infrastructure you probably want some central node coordinating and orchestrating).
The thing that's more interesting about terraform, as well as Amazon CloudFormation, is that it can not only represent the traditional assets of servers and VMs, but also can describe SaaS services, which is slick.
So it's not so much splitting configuration across multiple tools, moreso of segmenting out the levels of description - I have one tool for service definition and catalog management, I have another tool for effecting change and configuration within a given service. Macro vs. micro.