Heat 2 tbsp of olive oil in a large skillet over medium-high heat. Pat the beef cheeks dry with paper towels, season them lightly with a pinch of salt and pepper, and sear them for 3-4 minutes per side until browned. Work in batches if needed to avoid overcrowding. Set the beef cheeks aside on a plate.
In the same skillet, add the remaining 1 tbsp olive oil if needed. Toss in the diced onion, celery, and carrot. Sauté for 5-7 minutes until softened and fragrant. Add the minced garlic and cook for another 1 minute, stirring to prevent burning.
Pour the 2 cups of red wine into the skillet. Turn the heat to high, bring it to a simmer, and let it bubble for 1-2 minutes, scraping up the browned bits from the bottom of the pan with a wooden spoon. This infuses the wine with extra flavor and cooks off some of the alcohol sharpness.
Transfer the onion mixture and wine into the slow cooker. Nestle the seared beef cheeks on top. Add the beef stock, thyme stems, bay leaves, and the remaining salt and pepper (start with 2 tsp each, reserving the rest to adjust later).
Cover and cook in the slow cooker. Set it to Low for 8 hours or High for 6 hours. For larger 12oz cheeks, go Low for 10-12 hours or High for 8 hours. The meat should be fall-apart tender when done.
Carefully remove the beef cheeks to a plate and cover to keep warm. Discard the thyme stems and bay leaves from the liquid.
Use a handheld stick blender to puree the braising liquid directly in the slow cooker until smooth. It’ll transform from a dark brown to a lighter, velvety gravy. Taste and adjust with more salt and pepper as needed.
Prepare the mashed potatoes according to the package instructions. Spoon a generous pile onto each plate, top with a beef cheek, and ladle the savory sauce over everything.