That's exactly it. In my original prototypes I did have a "coulomb counter" chip but somewhere along the way that got removed and I didn't notice, leaving us with only the battery voltage to guess at what the actual State of Charge might be. And the relationship between voltage and SoC is far from a one-to-one mapping--there are lots of extra variables there like how long it's been charging/discharging, how worn out the battery is, random manufacturing differences.. Even if we did have a function that could tell us a percentage from that info we don't have a way to track it all.
So what we have instead is basic voltage->percent mappings for charging and discharging, then some hackery heuristics so that when you switch between the two the percentage doesn't change wildly--though, as noted above, there are some cases where that isn't doing its job quite right. Added on top of that is the problem we had with some recent boards where the voltage ADC was miscalibrated making it look like the device isn't getting to 100%, though it was actually at max voltage.
If only we had that coulomb counter.