Prepare the Cupcakes:
Preheat your oven to 350°F (175°C). Line a muffin tin with cupcake liners.
In a medium bowl, whisk together the flour, baking powder, and salt.
In a separate large bowl, beat the butter and sugar together until light and fluffy. Add the eggs one at a time, mixing well after each addition. Stir in the vanilla extract.
Alternate adding the dry ingredients and milk to the butter mixture, starting and ending with the dry ingredients. Mix until just combined.
Divide the batter evenly among the cupcake liners, filling each about 2/3 full. Bake for 18-20 minutes, or until a toothpick inserted into the center comes out clean. Let the cupcakes cool completely.
Fill the Cupcakes:
Using a small knife or cupcake corer, create a small hole in the center of each cupcake. Fill the holes with a teaspoon of dulce de leche.
Make the Frosting:
In a large bowl, beat the butter until creamy. Gradually add the powdered sugar and beat until smooth. Add the dulce de leche, vanilla extract, and heavy cream (or milk) one tablespoon at a time, beating until the frosting is light and fluffy.
Frost the Cupcakes:
Transfer the frosting to a piping bag fitted with your favorite tip. Pipe the frosting onto the filled cupcakes.
Garnish and Serve:
Drizzle the tops with extra dulce de leche, sprinkle with a pinch of sea salt, and garnish with caramel candies or toffee bits, if desired.