All of the wear leveling and bad sector remapping that goes on in flash drives is behind the scenes, handled by the flash controller. The drive has a bit of extra capacity (in the 20% range, depends on the drive) above and beyond the capacity reported to the host computer. Every time you write to a block, the flash controller has the option to remap that to a new physical location on the drive, and move the original block to the spares list. This spreads out the wear so that if you write the same file over, you actually write to many physical locations only a few times each. When a given block starts to wear out, the flash controller will stop using it altogether. When the number of spare blocks drops below a certain level, the drive becomes essentially useless.
In any case, the reported total size should not change over the life of the drive. In principle it is possible, and some solid-state drives may allow you to reformat and get a new slightly reduced capacity, but this doesn't happen under normal use, never happens to USB flash drives that I know of, and isn't really standard.
Most flash failures occur during writes. The amount of time needed to erase and write a block increases with the number of times it has been erased. When the write time gets to a given threshold, the controller decides that the block is dead. You should never see IO errors from this type of failure, as the drive should automatically redirect the 'write' request to a new block with no loss of data. It is possible to have failures triggered by reads (block was written OK, read OK once, fails the second time) or by writes to an adjacent block. In these cases you will get an IO error as there is data loss. The OS may mark that block as bad, and stop using it, although that is not really helpful or necessary: writing data to that block will cause the firmware to remap it to a new physical location and mark the damaged block as defective.
The important thing to keep in mind is that the virtual block address seen by the host computer is not really related to the physical block address at all.
All of this only applies to large NAND flash drives like SD/compact flash, USB pen drives, and SATA solid state drives that are designed to hold a general purpose filesystem. Small embedded chunks of flash typically do not work like this at all. They are generally designed either to be occasionally written serially all at once, like the program memory in a microcontroller or the separate boot firmware on a PC or embedded device, or used in a log fasion where they are written a few bytes at a time in a circular fashion (this would be my guess for how the logging meters work). In some cases, they will use a special filesystem called a logging filesystem that is specifically designed for flash drives and writes in a logging format (beginning to end) while providing a more standard filesystem interface, usually at a considerable speed penalty (which is OK as these devices are usually very small: a few MB at most). In any case, these embedded devices typically do not have to provide a full filesystem compatibility, and naturally spread the wear over the whole drive, so the flash controllers don't have to do this.