Well it seems I was in the wrong direction, the HandleUtility class provides a raycast helper and you can extract the world position from the ray origin. Simple
Here is a working solution:
Vector3 mousePosition = Event.current.mousePosition;
Ray ray = HandleUtility.GUIPointToWorldRay(mousePosition);
mousePosition = ray.origin;
Handles.DrawLine(btn.transform.position + Vector3.up, mousePosition);
Cheers
Oh and if the drawing is laggy, you can use HandleUtility.Repaint();