I don't see the problem.

No matter how many changes you're making, you're making them one at a time. Any change that does not involve editing a plist file is already playing nicely with cfprefsd. For any change that does involve editing a plist, ask cfprefsd to give you your own copy of the file, edit that, then hand it back to cfprefsd, and again you're playing nicely.

You don't need to do any manual edits that you aren't doing already. Automated edits can work just as easily against a copy of the plist as against the original.

What do you care if entire trees are being tossed around? You don't need to see them; only your scripts do. It's no more work for cfprefsd to handle an entire tree you give it than to re-read an entire plist file. It's not like cfprefsd ever reads only part of a file.

For that matter, any edit involves passing around an entire tree. Do you think PlistBuddy doesn't read the entire input file and write the entire output file? Or sed? Or awk? Whatever tool your scripts are using to edit your plist files slurps up the entire file, applies edits internally, and spits out the entire updated file.

I just don't see the problem.