Maybe instead of deleting/freeing the KinematicBody2D, instead you place it back at the start? That way, you don't have the issue of instancing, moving, and deleting a bunch of KinematicBody2D nodes.
You can instance nodes, but to the best of my knowledge there is no great way to have a node respawn itself. Generally nodes have to be instanced by another node, generally a parent node, with code like this (untested):
extends Node2D
const SCENE_TO_SPAWN = preload("res://path_to_scene_here.tscn")
func _ready():
# example: spawn one scene and add it is a child
var clone = SCENE_TO_SPAWN.instance()
# set properties on the clone (if needed)
clone.name = "clone 01"
# add the clone as a child of the node this script is attached to
add_child(clone)
Also, welcome to the forums! :smile: