Unlike range and SOC, etc. which update via telematics (cellular network) the odometer updates via Bluetooth and that is what causes the lagging problem.
Although this will be a lengthy explanation, it's actually a more wide ranging explanation of how the different functions in HondaLink communicate, so that it will be more clear why some functions work differently than others. Also a disclaimer, all of this is just what I have been able to figure out from using the app and observing when things work and when they don't work. I don't know of any actual documentation of these details.
Most items in HondaLink communicate via telematics. The communication occurs between the car and Honda servers over the AT&T 3G cellular network. For these functions the car does not communicate directly with your phone. The app on your phone connects via Internet to the Honda servers. Thus for these functions there is no direct communication between your phone and the car.
For example if you are at work or wherever and you are about to leave and you want to start the climate on your car, you go to the app and press "Turn on Climate". The app then communicates this command to the Honda server via the Internet. It doesn't matter how your phone happens to be connected to the Internet at that moment, i.e. you may be connected via cellular data, or your phone might be connected to the Internet using a nearby WiFi hotspot. Either way it's just a routine Internet connection between your phone app and the Honda server via the Internet.
When the Honda server receives your request via the Internet, it then "calls" the car. For this to work your car has to be in cell phone range of an AT&T 3G tower. Once the "call" is connected the server then transmits your climate request to the car, and also receives from the car confirmation and the current temperature. The Honda server then sends to your phone via the Internet the confirmation that climate has started (and the temperature). It then hangs up the cell phone "call" with the car, which is why the temperature on the app doesn't constantly update during the 30 minutes that climate is running. I think it does update the temperature every once in a while but I haven't paid attention to see if the updates are based on temperature change or simply time.
Range and SOC work similar except that the data updates are not user initiated, instead the car "calls" the Honda server when certain events occur, one of which is initiating charging, or ending charging, another event that initiates a phone call to the server is simply shutting off the car (which also transmits location data for "Find My Car"). Also during charging it considers it an "event" when each 15% SOC milestone is reached, i.e. 25%, 40%, 55%, 70%, 85% and 100%. Whenever any of these events occur the car makes a phone call to the Honda server providing an update of charging status, as well as current SOC and range. You may not even have the app running at that time, doesn't matter as this is automatically initiated communication between the car and the Honda server. Later when you open the app and connect (via Internet) to the Honda server it will give you whatever the SOC and range were the last time the car "called in". If however when you shut off the car it was outside of cellular range, it will not be able to update the SOC and range to the server. In that case the app will continue to show whatever the last update was, so you always have to look at the update time (which unfortunately is in hard to read tiny gray font) to make sure that you are looking at the correct data, assuming you remember approximately what time you shut off the car.
Whew, okay now to the odometer which marches to a different drummer. As I mentioned the odometer data is sent directly to your phone via Bluetooth. You don't have to be running the app for it to update, assuming that your phone automatically connects to the car via Bluetooth for phone calls. In theory this means odometer should be constantly updated, but in practice it doesn't work that way. Apparently it updates on some type of schedule although so far I have found no rhyme or reason, all I know is it updates while I am driving, because I arrive home and the app shows an odometer reading several miles in the past. It is not event driven from turning the car on and off, because for example when I arrive home the odometer on the app is for example five miles behind the actual odometer, and I just drove twenty miles, so that means the odometer updated while I was driving and when I was five miles from my house. Since it didn't update again when I shut off the car the app odometer reading is lagging five miles.
The only way I know to force it to update is to go out to the car, turn the car on, open the HondaLink app, when I get the "Connecting" screen on the app don't press dismiss, instead just sit there like a dummy for two minutes or however long it takes for the connecting message to go away, and usually the odometer now updates. Although oddly even then it often is one mile off. Some type of rounding issue I assume. And anyway obviously by that time I could have simply read the odometer reading off the dash. It's the same fundamental flaw as sending map data to the nav system, as the "Send To Car" function also uses Bluetooth, which means you have to be sitting in the car, which completely defeats the purpose as again if you are already in the car you can more quickly just enter the destination directly into the nav screen.
It would be SOOOO nice and SOOOO smart if it simply included the current odometer data during the normal telematics communications when you shut off the car. It is already sending range and SOC data to Honda via telematics whenever you turn off the car, so then why oh why doesn't it include the odometer reading? I understand Honda is paying for the cell data, but is that tiny bit of data really enough to worry about? I wonder how much money they spent building it into Bluetooth instead?