If you have client values, read and used by the clients...
They should stay on client side. Never into the world data, which is server property, including item NBT.
Write the client stuff on the client config file.
Now if the server use values, the defaults should be from the server configuration. Because there may be no client connected.
If the client need to know about those values, the server would send them through packet at appropriate time.
Let say there is a value such that both sides care about.
Server config contains "X" as default, sends it over to client.
->X | X (both sides)
Client config applies a "client modifier=A" on it:
->X | X*A (use it for its own purposes)
User makes a modification "+" in GUI.
->X | X*A+A (temporary client side evaluated expression, based on client config)
Client send "+" packet, (contains GUI id and other stuff for identifying source) server receives "+" packet and applies its change.
-> X + 1 | X*A+A
Server may need to send back an update (could be same packet as first time), just in case...
-> X + 1 | X + 1
Which client config still apply client modifier on before use
-> X + 1 | (X+1)*A
etc.
In summary:
"A" is never sent over the network. It is kept by the client side data (in config file, probably).
"X" is sent by the server to the client. It is kept by the server data (in world save, probably), send by packet to client.
"+" is an operation known to both sides (or only server, in which case update packet is mandatory everytime). It is not data, and is thus not saved by either.
Client to server packet will ask server to perform "+" operation on its value, based on mutual agreement of the code needed in the packet to identify as "+" operation, such as channel name.
"*" is a client side operation. Server doesn't care nor understand.