All the coordinates from the Leap SDK are real-work relative to the Leap device. So finger tip positions aren't relative to the hand. If you look at the FingerModel script, you can see that the positions are transformed relative to the HandController, but there is also an offset calculated:
Vector3 local_tip = finger_.Bone ((Bone.BoneType.TYPE_DISTAL)).NextJoint.ToUnityScaled (mirror_z_axis_);
return controller_.transform.TransformPoint (local_tip) + offset_;
(The Unity Assets use the end of the bone, rather then the Finger TipPosition -- they are slightly different.)
To maintain consistency with the calculations done by our Unity scripts, it is probably easier to use FingerModel.GetTipPosition() instead of rewriting the calculations using the values directly from the underlying Leap API.
Also, for direction vectors use ToUnity() not ToUnityScaled(). Directions should be unit vectors and scaling them violates that assumption.