Largely performance and design flexibility. See the evaluations that start on about page 67 of our autodiff paper.
The design that we extended is Sacado (from the COIN-OR project). We cite the David Gay paper that explains how Sacado’s autodiff works. We just had to engineer a more efficient version. The evaluations compare Stan’s autodiff to CppAD, Sacado, Adept, and adolc.
I go over a basic C++ autodiff design from scratch based on functional C++ with continuations and then refactor the lambda-based closure design to the custom version used in Stan: