Racing Game AI..Rubber-Banding or Behaviour Tree..or other?

Im working on a racing game and I am looking for the best method for making it feel like a fair and exciting race?
Currently all racers have the same top speed and because of this it becomes boring very quickly.

i tried a rubber banding system where i gave racers a percentage of extra speed based on their race position, but if you come from 8th to 1st, you feel like you are constantly being pulled back. (Its terrible).

I want players to race against each other and not just take off and not see anyone and at the same time I also want them to be able to claw their way back to first/second if they end up crashing early on, (obviously if they put the grind in!)

i just saw something about behaviour trees and I was wondering if this is the way to do it?
Somehow all race games are able to achieve this and I was just wondering what I’m doing wrong?

Im happy to sit and watch tutorials if someone can direct me to the right place or even offer some advice?

Thank you all for your time,
Much Appreciated.