In a heavy-bottomed skillet or medium saucepan, melt the unsalted butter over medium heat. Whisk in the all-purpose flour all at once and cook, whisking constantly, until the roux turns golden, about 2 minutes.
Remove from heat and gradually whisk in the warmed whole milk, a little at a time, to prevent lumps. Return to low heat and cook, stirring continuously, until the sauce thickens and pulls away from the sides of the pan, about 10–15 minutes.
Stir in the finely chopped serrano or ibérico ham and a pinch of freshly grated nutmeg. Season with salt and freshly ground black pepper to taste.
Transfer the mixture to a shallow dish, smooth the surface, and cover directly with plastic wrap so it touches the surface. Chill in the refrigerator for at least 4 hours or overnight until firm.
Using lightly oiled hands or two spoons, shape the chilled mixture into cylinders or balls. Set up a breading station with the beaten eggs in one bowl and the plain breadcrumbs in another.
Dip each croquette into the beaten eggs, letting any excess drip off, then coat evenly with breadcrumbs.
Pour enough extra virgin olive oil into a large, heavy pot or Dutch oven to come about 2 inches up the sides. Heat over medium-high heat until the oil reaches 350°F (175°C) or starts to shimmer.
Fry the croquettes in batches, turning occasionally, until golden brown all over, about 2–3 minutes per batch. Use a slotted spoon to transfer them to a paper towel-lined plate to drain.
Serve the croquettes hot.