Begin by pouring the milk into a medium saucepan and setting it over medium heat. Warm the milk until it just begins to steam and small bubbles form around the edges—do not boil.
In a large mixing bowl, whisk together the granulated sugar, cornstarch, and egg yolks until the mixture is smooth and pale. Slowly temper the egg mixture by gradually adding a small amount of the warm milk while whisking constantly. This step prevents the eggs from scrambling. Continue to add the rest of the milk, whisking continuously until fully combined.
Clean the saucepan and return the mixture to it through a fine mesh strainer to ensure a silky texture. Set over medium heat and cook, whisking constantly, until the custard thickens enough to coat the back of a wooden spoon. Immediately transfer to a clean bowl and whisk in the butter and vanilla extract until fully incorporated. Press plastic wrap directly onto the surface of the custard to prevent a skin from forming. Set aside to cool completely.
To prepare the whipped cream, beat the softened cream cheese, powdered sugar, and vanilla extract in a large mixing bowl using a handheld mixer. Mix until smooth and creamy. Add the whipping cream and beat on high speed until stiff peaks form and the mixture holds its shape.
To assemble the pudding cups, layer custard, banana slices, vanilla wafers, and whipped cream in small dessert cups or Mason jars. Repeat the layers once more, finishing with a generous dollop of whipped cream. Refrigerate the assembled cups for at least 2 hours before serving to allow the flavors to meld. Garnish with extra banana slices and crushed vanilla wafers just before serving for added texture and presentation.