Warm the milk to 100–110°F (38–43°C). Sprinkle the yeast on top and let it sit for 5–10 minutes, until bubbly.
In a large bowl, whisk together the milk/yeast mixture, melted butter, sugar, vanilla, and eggs. Stir in lemon zest.
Add the bread flour and salt. Knead by hand or with a dough hook for 10 minutes, until smooth and elastic.
Place the dough in a greased bowl, cover with plastic wrap, and let rise in a warm spot for 60–90 minutes, or until doubled in size.
Punch down the dough and roll into a 12×18-inch rectangle on a floured surface. Spread the softened butter over the dough. Sprinkle evenly with sugar and lemon zest, and lightly press in with your hands.
Slice into 12 1-inch strips. Roll each strip into a tight spiral. Optional – Add a splash of lemon juice + a sprinkle of sugar to the bottom of the pan before placing rolls—this creates a sticky lemony base. Then place into a greased 9×13 baking dish.
Cover and let the rolls rise for 30 minutes.
Drizzle ¼ cup of heavy cream over the tops for extra gooeyness (optional).
Bake at 350°F (175°C) for 20–25 minutes, until golden on top.
While baking, beat together cream cheese, butter, lemon juice, and zest. Slowly mix in powdered sugar until smooth.
Let the rolls cool slightly, then generously frost while warm.
