You could calculate the distance from the car to the point on the Path2D, and then use that as the velocity in a move_and_slide
function call. I'm not 100% sure it would work, and you'd need to move the point on the Path2D forward as the car gets closer, but it might be something to look into?
In theory, it would look something like this (untested, pseudo-ish code):
extends KinematicBody2D
const SPEED = 200
const DISTANCE_TO_MOVE_POINT = 100
var velocity = Vector2.ZERO
func _process(delta):
var path_point = get_node("PathFollow2D").global_position
var vector_to_path = path_point - global_position
if (vector_to_path.length() <= DISTANCE_TO_MOVE_POINT ):
# move the path follow 2D node down the path by a little bit
get_node("PathFollow2D").offset += 20
velocity = vector_to_path.normalized() * SPEED
velocity = move_and_slide(velocity, Vector2.UP)