In the bowl of a stand mixer fitted with the dough hook, combine 3 1/2 cups all-purpose flour, 3 tablespoons granulated sugar, 1 tablespoon instant yeast, and 1 1/4 teaspoons kosher salt. Mix briefly to combine.
Add 1/2 cup lukewarm milk and mix on low speed for 20–30 seconds.
In a small bowl, beat 3 large eggs with 1 teaspoon pure vanilla extract. Add the egg mixture to the flour mixture and mix on low until most of the flour is incorporated and the dough starts to come together.
With the mixer running on low, add 1/2 cup unsalted butter (at room temperature, cubed) slowly, a few cubes at a time, until incorporated.
Increase the mixer to medium speed and knead for about 5–7 minutes, until the dough is smooth, supple, and mostly pulls away from the bowl. (If mixing by hand, knead 10–15 minutes.) If the dough is sticky, add flour a tablespoon or two at a time until it is no longer sticky, being careful not to add too much.
Form the dough into a ball, place it in a clean, lightly greased bowl, cover with plastic wrap or a clean kitchen towel, and refrigerate to rise for at least 2 hours or overnight.
While the dough is chilling, make the cinnamon filling: in the bowl of a stand mixer with the paddle attachment (or in a medium bowl with a fork), combine 3/4 cup unsalted butter (at room temperature), 2 tablespoons ground cinnamon, the granulated sugar and brown sugar called for in the ingredient list, 1 teaspoon pure vanilla extract, and 1/4 teaspoon kosher salt. Mix and mash until the filling is completely smooth. (This can be made ahead and left at room temperature so it stays softened.)
Make the apple filling: in a saucepan over medium–low heat, combine 2 large apples (peeled, cored, and finely diced), 1/4 cup granulated sugar, 1 tablespoon lemon juice, 1 tablespoon cornstarch, 1 teaspoon ground cinnamon, and 1/4 teaspoon kosher salt. Cook, stirring, for about 5–7 minutes, until the released juices begin to thicken. Remove from heat and cool to room temperature, then refrigerate until ready to use.
When the dough has chilled at least 2 hours (or the next morning), lightly flour your work surface and rolling pin. Turn the dough out and roll it into a roughly 15-inch by 17-inch rectangle about 1/8 inch thick.
Spread the cinnamon filling in an even, thin layer over the dough, leaving a small border. Spread the cooled apple filling in an even, thin layer over the cinnamon layer, leaving a slightly larger border on the edge you will finish rolling.
Starting from the long edge farthest from you, roll the dough toward you into a tight, firm log. Press the seam to seal.
Use a length of unflavored dental floss or a sharp knife to slice the log in half, then slice each half into six equal pieces for a total of 12 rolls (about 1 1/2 inches thick). If you prefer larger rolls, cut each half into 4 pieces for a total of 8 rolls.
Arrange the rolls, seam side down, in a greased 9 x 13-inch baking pan (or similar). Cover with a kitchen towel and let the rolls rise at room temperature until doubled in size, about 45 minutes (longer if your kitchen is cool).
Preheat the oven to 350°F (175°C). Bake the risen rolls for 28–30 minutes, or until the tops are golden brown.
While the rolls bake (or immediately after removing them from the oven), make the cream cheese icing: in a mixer bowl, beat 4 ounces cream cheese (at room temperature) and 2 tablespoons unsalted butter (at room temperature) until smooth. Add 1 1/2 cups sifted powdered sugar, 1/4 teaspoon kosher salt, and 1 tablespoon heavy cream. Beat until combined and spreadable.
As soon as the rolls come out of the oven, spread the cream cheese icing evenly over the warm rolls. Serve warm.