Warm the 2/3 cup whole milk to about 110°F (warm to the touch, not hot). Sprinkle the 2 1/2 teaspoons active dry yeast into the milk, stir to combine, and let stand until foamy, about 5 minutes.
In a large mixing bowl, whisk together 4 1/4 cups all-purpose flour, 1/2 cup granulated sugar, and 3/4 teaspoon salt.
Add the 1/2 cup melted unsalted butter, the 3 large eggs, and the foamy yeast-milk mixture to the dry ingredients. Mix until a soft, shaggy dough forms.
Turn the dough onto a lightly floured surface and knead until smooth and elastic, about 8–10 minutes by hand (or 5–7 minutes in a stand mixer with a dough hook).
Place the kneaded dough in a lightly greased bowl, cover with plastic wrap or a clean towel, and let rise in a warm place until doubled in size, about 1 1/2 to 2 hours.
While the dough rises, make the topping: in a medium bowl, beat together 1 cup all-purpose flour, 2/3 cup powdered sugar, 1/2 cup unsalted butter (room temperature), and 1 1/2 teaspoons vanilla extract until a smooth, spreadable paste forms. If using food coloring, divide a portion of the topping and mix in color as desired. Divide the topping into 12 equal pieces.
After the dough has doubled, punch it down gently, divide it into 12 equal pieces, and shape each piece into a smooth ball. Place the dough balls on a baking sheet lined with parchment, leaving space between them.
Flatten each topping piece into a thin circle large enough to cover the top of a dough ball (use your hands or roll between parchment). Drape a topping circle over each dough ball and lightly press to adhere. Use a sharp knife to score the topping with a clamshell or other design, taking care not to cut into the dough.
Preheat the oven to 350°F. While the oven preheats, cover the prepared buns loosely and let them rest for about 15 minutes. Bake the buns at 350°F for 18–20 minutes, until the buns are set and the topping is lightly golden. Transfer to a wire rack to cool.