Cell balancing happens all the time.
There is definately some balancing done at the end. You have cell balancing in each module and then balancing between modules. From my experience with BMS's I would guess the modules are balanced all the time and the cells within modules are balanced at the end. Lithium batteries have a very flat voltage curve except at the bottom and top of charge. So BMS's use the top balance method as it is easier and happens every charge (unless you stop at 80%). The only bottom balancing I have heard of is done manually.
The voltage of a lithium cell at 50% soc and 70% is almost identical and given difference between cells you could have 2 cells at the same voltage but one is 50% soc and the other 70%. If your cell voltage is normally around 3.2V, at say, 3.7 volts you know the cell is almost full because the voltage only rises like this when the cell is almost full. If every cell is 3.7 V then you know every cell is almost 100%.
But with monitoring the pack voltage it will be far less accurate, but if every cell goes up by 0.01 V then across, say, 30 cells, then thats a rise of .3 volts that you could measure. These are just random figures to explain the idea.
I have only done one conversion of a bike to electric, but when looking at BMS systems, this is the way they all seemed to work and the explanation given. I don't see how you can cell balance at every step of charging. I am no expert but if someone wants to dispute this then please do (with the evidence and explanation to prove your case).
So if you charge to only 80% then every few charges you would want to charge to 100%, but that could be programmed into the Arduino program. How do you tell if you are at 80%? It is usually done by an algorithm that measures the amount of power you use ( it knows the total power of the pack) and calculates a % SOC. The reverse is done when charging, e.g. if you have a 10 Kw/h pack and you monitor 5kw/h going out then you are at 50% SOC. If you monitor 3 kw/h going in, you are back up at 80%. The algorithm also takes into account pack age, number of time charged, to what depth of discharge etc, etc.
This is why 2014 bikes would say you had 10% SOC and then cut out 1% later with on charge left - the calac was out of whack with reality. By making the algorithm smarter the accuracy increases.
So if you measure the pack voltage and lets say each cell rises by 0.01 V then if you have, say, 30 cells thats .3 V that you can measure and have the charger disconnect.
These figures are just random numbers to explain the idea. It is certainly doable.