Hi Theo,
The ideal setup would be that the slider going from 0 to 100 would match up to the progress along the path.
After some digging into several of Dan Ebberts’ examples of similar type, here’s what you can do:

The position expression uses the length of the full animation along the path. The default when you paste a path is 2 seconds, but I’ve stretched it to 12 seconds which is the length of my animation test. You can leave it at the default, but make sure that the first figure in the expression is the length of the animation in seconds.
I discovered that adding this expression to the position value messes up the auto-orientation. So you have to turn auto-orientation off and use an expression to generate a custom autorotation.
Then attach the trim path end value to the same slider, and everything will be synced. Now you can keyframe the slider and the car and the path will follow.
Position:
valueAtTime(12/100*thisComp.layer("control").effect("progress")("Slider"))
Rotation:
if(time<=0.1) {
p1 = transform.position;
p0 = transform.position.valueAtTime(time+.1);
vect = p1-p0
}else{
p1 = transform.position;
p0 = transform.position.valueAtTime(time-.1);
vect = p0-p1}
value+radiansToDegrees(Math.atan2(vect[1],vect[0]))