My preferred solution is to have a rule hierarchy. On the top level you set routes to be local, interurban or long distance for each type (train, road, tram) . Then you enter your preferred replacement unit and max age for each vehicle type. This will have the units automatically replaced when they are close to a depot and near end of life, or sent to nearest depot when older than max age. It ought to work for replacing individual cars in a train.
For an override, I would like to be able to have a different rule for lines serviced by a given depot. Some towns might have a higher or lower priority for new rolling stock.
I would want to be able to tag a given unit with “no sell” to retain some museum pieces.