Separate tracking and model transformation is a proper solution in my opinion.
Regarding the pivot: The pivot values in Object space should stay the same when changing the translation of the same node. In World space not, because the pivot moves together with the node, it is not fixed in the world. But this is the same when adding a parent node above and moving that, the pivot of the child node will move (in the world) together with the translation of the parent. It is hard to tell from a distance what is happening in your case.
Extracting rotation: If you do want to set the complete transformation (translation and rotation) anyway, just set the matrix as it is to the node:
trackerNode.setTransformMatrix( tracker0.getWorldMatrix(), False)
The trackerNode must be a "Matrix Transform" created in GUI with Create > Matrix Transform, or with Python createNode("Transform").
If you specifically need the rotation angles as well, the easiest way should be to call getRotation() on the trackerNode afterwards.
Method "getWorldMatrix" for the tracker is actually from the API v1 which is deprecated for VR since 2020.1.
If you're not working with an existing legacy script but are in the process of creating a new one, I suggest switching to the API v2 for VR.
The example for attaching a node to a tracker in API v2 recommends using a constraint. Constraints are only available in API v2 and pure scripting functionality, constraints cannot be managed in GUI yet.
Since 2021.3 it is possible to work with transformations in API v2. I guess you can then also query the matrix of the device with device.getNode().getWorldTransform().
Kind regards
Sinje