Haha don’t expect a simple answer 
You can look at the blender studio project Settlers , that looks quite similar :
I think basically they actually rigged a curve that is shrink-wrapped to the face.
That way you have a lot of flexibility but you need to do some hack because there isn’t any hole in the face.
It’s an experiment for the inside of the mouth :
there isn’t any hole, both are rigged the same way, but there is a shader trick that fake depth, it’s the same principle than these :
One the overall, that approach makes the lips relatively easy to rig, but everything else is getting more complicated…
The other option, is to have a real hole, and a face topology that would allows for a lot of compression and expansion.
Looking at how blender studio did on sprite fright is probably interesting too since their character’s face where quite flexible. You can start to look at their production log talk they did at blender conference.
That approach makes everything a bit tedious, having the lips really tied to the face’s hole is tricky too, but it’s probably more robust, since hacks tends to break.
Probably the first step would be to create a Bbone chain to control the lips…
And try to synchronize the lips with the face hole.
There are probably other approach, I can’t help you more right away …
Hopes that helps getting started, maybe try a few things first and then we can discuss that more precisely based on your findings…
Have fun !