There are many ways to achieve this - there is not a single way. It depends on your puppet. I mention how I normally do expressions for my puppet eyes in https://extra-ordinary.tv/2018/04/21/debugging-character-animator-eyess/ but there is also the mouth structure.
For the mouth, I normally create a "Mouth Group" layer with children of "Mouth" (under which goes all the normal visemes), angry, grumpy, etc. I then create a swap set based on those layers. So using triggers I replace the default LipSync controlled "Mouth" with a particular expression. I found things don't work well if you put the extra expressions inside "Mouth" - it gets confused.
But you could instead replace the whole head for example - have completely different sets of eyes, mouth, etc for different expressions. That would also work - its just a choice of what makes more sense for your artwork. I tend to follow the above pattern just because once I got it working I repeat it over and over again. But there are certainly other ways (like replacing the entire head).
It can be useful browsing the sample puppets as well. I am not sure which has good example to be honest, but I am sure there are some useful examples in there. I would look at the available triggers for the puppets to see if there are any "expression" triggers.