There is no need to update the position of the laser when it's made child to the circle; the initial positioning will suffice.
Either leave the laser's starting position when it's the child of the laser or do not make it child to the laser and update it's position to match that of the circle.
So if you want to keep the laser as the child of the circle then maybe:
laser
func _physics_process(_delta: float) -> void:
if Input.is_action_pressed("LMB"):
enabled = true
# If the parent is looking at the mouse
# then so will the children. No need for this.
#look_at(get_global_mouse_position())
# Laser position is already set in the
# _ready() method of the circle script and
# _ready() of this script.
#$Line2D.points[0] = position
$Line2D.points[1] = to_local(get_collision_point())
else:
enabled = false
# Again, this is already set.
#$Line2D.points[0] = Vector2.ZERO
$Line2D.points[1] = Vector2.ZERO
I didn't set this as an answer since I haven't tested it. Hopefully it is the answer.