Well, to come back to code, I updated it so it goes through all modules used during checkout and add their results, rounded as displayed. It is then compared with actual order total which is updated by each module by adding their results too but one after another and in full precision.
To do that, I had to add a line in each optional modules to save their own result in order object in a table named 'option_modules' (actually "$order->info['option_modules']").
I did some orders with all possible modules used and results were correct, penny correction worked fine too. For these tests I used modified versions of coupons and GV modules (See branch Coupons on GitHub) as originals have some bugs.

Order of module is very important as they use precedent module order total to do their calculations. Default setting should probably be modified, I would place tax module at order 998 just before total module (999).