Crack the eggs into a bowl, then add the milk, salt, and black pepper. Whisk for a few minutes to incorporate air.
Melt butter in a large skillet over medium-low heat. Pour in the egg mixture and let it sit undisturbed until it begins to set around the edges, about 2 minutes.
Using a rubber spatula, push the eggs from the edges toward the center, then spread the uncooked eggs back into an even layer.
Repeat this process every 30 seconds until the eggs are almost cooked, about 6–8 minutes total. The eggs should still be slightly wet on top, as they will finish cooking in the oven. Transfer the eggs to a bowl.
In a small bowl, combine the mayonnaise, honey, Dijon mustard, salt, and smoked paprika to make the glaze.
Line a large baking tray with parchment paper. Slice the croissants in half and spread about ½ tablespoon of the glaze on each half. Place the croissants on the prepared baking sheet.
To assemble, layer two slices of ham on the bottom half of each croissant, followed by a generous portion of scrambled eggs and half a slice of cheese. Place the top half of the croissant over the filling.
Spread the remaining glaze evenly over the tops of the sandwiches. Optionally, sprinkle with poppy seeds or everything bagel seasoning.
Bake at 350°F for 10–15 minutes, until the tops are golden brown and the cheese is melted.
Serve warm.