OK, so here is how it seems to work. Can't prove it, but it seems to fall in line with what happens in game:
The shell from each gun has a set damage value and a set armor penetration value at 0yds. Damage and penetration decrease as ranges increase. Damage also decreases with the thickness of armor the shell must penetrate. As long as your shell penetrates your target's armor, you will do some damage to him. Not nessiciarliy a lot, but some.
The tanks also have a damage threshold. One each for the tracks, the engine, the turret and the tank itself. When you excede the damage threshold for an individual part, it 'breaks' and no longer functions. If you keep hitting that part (tracks, and AA vehicles excluded, they had the damage model changed so that you can't hit the turret multiple times and kill the entire vehicle, IIRC) and it will eventually destroy the tank.
The M4 family all has pretty much the same armor. Factoring slope, this armor is ~100mm thick on the glacis plate. The M4(75) and firefly are both modeled with "dry storage" or ammunition stored in regular shell racks or bins. The M4(76) is modeled with "wet storage" or ammunition stored in water-lined bins. This reduced the chance of a detonation of the ammunition in the event the armor is penetrated. This is represented in the game with a higher damage threshold than the M4(75) and the Firefly.