In a large bowl, combine 2 cups of flour, sugar, yeast, and salt, whisking to incorporate. In a separate microwave-safe bowl, warm the milk and butter to 105-110°F (just warm to the touch). Add the milk mixture to the dry ingredients, then add eggs and vanilla. Using an electric mixer with a dough hook (or wooden spoon if mixing by hand), beat on medium speed until smooth, about 2 minutes. Gradually add remaining flour until a soft, slightly sticky dough forms.
Turn the dough onto a lightly floured surface and knead for 5-6 minutes until smooth and elastic. If using a stand mixer, knead with the dough hook for 4-5 minutes. Form the dough into a ball and place in a lightly greased bowl, covering with plastic wrap or a clean kitchen towel.
Let the dough rise in a warm, draft-free location for about 1 hour, or until doubled in size. For overnight preparation, place the covered dough in the refrigerator after kneading, where it will slowly rise for 8-12 hours.
While the dough rises, mix brown sugar, granulated sugar, cinnamon, nutmeg, and cloves (if using) in a small bowl. Set aside. Ensure your butter is properly softened for spreading – it should feel like the consistency of mayonnaise.
After the dough has doubled, punch it down gently and turn onto a lightly floured surface. Roll into a 16×12 inch rectangle. Spread the softened butter evenly over the dough, leaving a ½-inch border on one long edge. Sprinkle the sugar-cinnamon mixture evenly over the butter, then add nuts and soaked raisins if using.
Starting with the long edge that has filling to the edge, tightly roll the dough into a log, pinching the seam to seal. With the seam side down, cut the log into 12 equal pieces using unflavored dental floss or a serrated knife.
Arrange rolls in a greased 9×13 inch baking pan or two 9-inch round cake pans. Cover with a towel and let rise until nearly doubled, about 30-45 minutes. For overnight rolls, cover tightly with plastic wrap and refrigerate at this point. In the morning, remove from refrigerator and let stand at room temperature for 30-45 minutes before baking.
Preheat oven to 350°F. Bake the rolls for 25-30 minutes, or until golden brown. If they begin to brown too quickly, loosely cover with aluminum foil halfway through baking.
While the rolls bake, beat cream cheese and butter until smooth and fluffy. Gradually add powdered sugar, vanilla, and enough milk to reach desired consistency. Add a pinch of salt to balance sweetness.
Remove rolls from the oven and let cool for 5-10 minutes. Spread frosting over warm (not hot) rolls, allowing it to melt slightly into the crevices. Serve warm for the ultimate Christmas morning experience.