TNManager.onSetPlayerData sets the function that will be called when player update packets arrive. These packets are sent as a result of someone calling TNManager.SetPlayerData, but can also be sent from TNManager.SetPlayerSave.
TNManager.SetPlayerSave basically tells the server what file to use for that player's saves. It will load the data stored in that file (player.dat) and will ultimately result in onSetPlayerData being called with the parsed data's root node being passed as the DataNode parameter. SetPlayersave will also mean that the player's data will be saved to that file every time that player calls TNManager.SetPlayerData.
When you call TNManager.SetPlayerData("path/to/node", value), you pass a path. DataNode is like a file system -- it can have children just like files and folders. When you get an onSetPlayerData notification back, it will pass the "path/to/node" back to all players, along with the actual node at that pah -- same node you would get if you were to do player.Get("path/to/node"). You don't have to use this node if you don't want to. It's just there in case you do in order to save an extra lookup.
Player.Get just calls player.dataNode.GetHierarchy. It's a convenience function for you.
Pulling different types of data can be done via player.Get<type>("path/to/node"), or -- as the paragraph above explains -- player.dataNode.GetHierarchy<type>("path/to/node"). It's just shorter to use the convenience method. Same convenience method exists on the channel as well. You can do channel.Get<type>("path/to/node").