Change splitting is meant to assist with breaking down very large portions of Bitcoin. The scenario is that you start a new wallet with only one unspent (for our example here, we will assume that you have a starting balance of 10 BTC, all contained in a single unspent), and will create a series of 0.01 BTC payments. Naively, one would send 0.01 BTC and then have the remaining 9.99 BTC in flight as the change output. One would then either have to wait for confirmation or send unconfirmed inputs, then with the next payment of 0.01 BTC, you'd lock up all of your remaining balance of 9.98 BTC again.
Here's where targetWalletUnspents comes in: If your targetWalletUnspents is higher than your current number of "good sized unspents", the change would be split up into four change outputs of 2.4975 BTC and in the second payment, only one-quarter of your balance would be in flight.
On the other hand, we don't want to needlessly grind Bitcoin to dust, so we'll only create additional change outputs if we can create "good-sized outputs". These are defined as being at least 0.1 BTC.
Setting the noSplitChange parameter to "true" will disable all forms of change splitting. The parameters noSplitChange and targetWalletUnspents are mutually exclusive, transaction building will throw if you set both.