3 years before i had moved from puppet to chef specifically for this reason (albeit there are other reasons, but this was the main one). Extending chef is much easier. There are quiet a few projects which is built on top of chef . Infochimp's ironfan, Dell's crowbar are examples .
Chef servers REST interface is pretty decent . Low level domain objects related apis are also good, Though they are not perfectly idiomatic (like Chef::Node.list returns a hash) , but there are wrappers (like ridley) which provide a more idiomatic layer on top of chef. this means you can build any webapp easily chef aware.
knife is another good component that lets you glue together existing command line tools and build your own command line tools on top of it. knife also has a rich set of cloud specific extension that you can reuse.
Over the last three years I have integrated chef with various webapps (mostly rails, but java bindings are also straight forward, and you can see examples on github, theres an android app also), as well as used the knife interface for building command line tools for deployment strategies (like blue/green, canary release) that can be used from workstations as well as CI server.
So, in short depending upon your use case u'll be using any or all of those approaches, but all of them are widely explored and exploited :-) .
Specifically for reducing the setup efforts , you can use either bundler / Gemfile and have example knife.rb on your wiki (this will be easier to do) which your QA's can refer. Or you can actually chefify the workstation. I have done this for linux , but i know there are ample people who uses chef to automate their own laptops..
best
ranjib