Yeah, the part I can't figure a 'best method' is editing the track appropriately. I don't see any options to just swap textures on an object. The scripting is also pretty much a track based feature, and I haven't done any track editing. So I don't really know how a track is put together.
One potential way would be to model the individual elements of a 7-element display as separate .dof's, then have the script show/remove them appropriately (eg. a 5 is top, middle, bottom, upper left, lower right). Or just have 10 different dofs for 0 through 9.
I guess I'll have to fool with scripts to see what it actually works out to.
The relevant commands I guess are
rcar = get car (int)
x = get rcar velocity x
/ etc. for y, z
speed = sqrt(x^2+y^2+z^2)
/ convert units, since speed is likely in m/s
/ separate out the 3 digits (hundreds, tens, ones)
rnode = get node trackdir + "/" + "tens" + digit + ".dof"
/ eg. "carlswood_nt/tens0.dof"
hide rnode
show rnode
wait 1000
/ so it waits a second before showing another speed
I think this would be sufficient to work the display. But I haven't tried it ingame, and there's a lot of looping I glossed over, as well as how to write it efficiently (eg. store previous values, so it only has to hide 1 number and reveal 1 number, instead of checking all 10 are in correct mode every time)