As a new module is loaded into the kernel, the counters are also allocated. The counters can be read out as long as the module is in the memory.
However, the module_exit function is only executed when the module is unloaded. Once the module is unloaded, the counters are also free()d, so the coverage information of the module_exit is lost.
I could imagine a solution what keeps the counter values in the memory until they are not zeroed out by 'lcov -z', but I don't know if this would be the right solution for the problem.