I think the way that I would do this is to set the actual properties to be private
and then, provide a "set" method that allows external code to modify it.
obj.paintedColorOfCar = inputColor;
Then, in the tire class, you could force the user to use the set method in the Car class
t = Tire;
Also, if your Tire class must have a color property of its own, and it is truly derived from the Car's color, then just provide a get method in the tire class that calculates it
function out = getColorOfTire(obj)
out = obj.carAttachedTo.paintedColorOfCar;
The benefits of what I've outlined are that it provides one place (the Car) where the color property is stored, and the various other objects provide helpful methods to either modify or interpret that value.
You could also use listeners, but I agree with you that it might not be worth the effort.