There are also a number of different commands (scutil, nvram, defaults, pmset, PlistBuddy, etc.) instead of common interface for things that seem related but aren't. Discoverability is horrible, even when you know the name of the setting you want to change. It is not immediately apparent what arguments are needed for "defaults write" based on the output of "defaults read" (possibly due to my own ignorance, but this raises the learning curve substantially).
Granted, there are a thousand different ways to configure any given Linux environment with varying degrees of difficulty, but I feel like many of the user preferences in the linked script would be better managed in dotfiles as they are in Linux (and other Unices and even for many apps on Mac OS).
I don’t think there is anything wrong with re-setting a bunch of properties in plist files every time a session is opened.
You’re right, the CLI is a difficult to use if you don’t know it beforehand. And even knowing it does not tell you about the various properties you can change with default. At least the script here points to some useful options.