It turns out that returning the child ValueTree isn’t as safe as it first seems.
If you did something like this…
auto child = juce::ValueTree("parent")
.addAndReturnChild(juce::ValueTree("child"), nullptr);
…the “parent” ValueTree would go out of scope, and you’d be left with an orphaned child. The existing API forces us to keep “parent” in scope, thus avoiding this problem.