There's a number of options in how to approach this, each with their pros and cons.
Stuff like character height is pretty easy, but once you go beyond that, it gets more involved and there's tradeoffs to which technique you go for.
The most common one now-adays is having a bunch of additional bones in the skeletal rig that can be moved/rotated/scaled to influence the makeup of the face and body.
For example, you could have a 'stomach' bone that when scaled up causes the character's stomach portion of the mesh to appropriately scale up to make them fatter.
This is often used for faces and stuff as well. You double-duty the bones that go into animating the face by having them move, rotate or scale to change how the face is structured.
The biggest advantage of this is that it works fine with Hardware Skinning, so performance stays up. There's a practical cap to how many bones you can have, but usually you don't have many dozens of additional bones for this sort of thing.
The downside is that this makes rigging more complex and involved, because those additional bones need to be very particularly skinned to the mesh in order to look good when implemented. Nothing impossible, but it does increase the workload a good bit.
An older way to go about it was Morph Targets(aka Shape Keys) where you would have an 'animation' of the min/max values for vertex positions in the target, and you could selectively apply that. This allows for anything from facial animation, changing the character's mesh for customization up to doing stuff like muscles bending/flexing as they animate.
The downside is that there's no really a good way to do this with Hardware Skinning, meaning that going this route requires the mesh to be rendered and animation be processed on the CPU. This adds a fair bit of overhead to rendering each character.
If you only have a few characters, then this tradeoff is fine, but it's not something you're going to want to do if you anticipate having many dozens of characters on-screen at once.
The third major way would be just having a bunch of alternate sub-models that you swap between. It's not as flexible as the other two methods(you have a set number of character faces to work with rather than full customization, for example) but it's fast, it's easy to use/make from an art perspective, and you as an artist get a very fine amount of control over what the characters can look like.