Move and rotate an object according to travel distance and direction between objects
I figured out that I needed to use to_track_quat() instead of rotation_difference() to get the direction along this vector.

import bpy
import mathutils

selected_object = bpy.context.object
car_f1_location = bpy.data.objects['car_f1'].location.copy()
car_f2_location = bpy.data.objects['car_f2'].location.copy()

direction_vec = car_f2_location - car_f1_location
direction = direction_vec.to_track_quat('Y', 'Z')

selected_object.rotation_quaternion = direction