Preheat the oven to 350ºF.
Cook lasagna noodles according to package instructions. Drain and rinse with cold water.
While the noodles are cooking, melt the butter in a heavy-bottomed pot and stir in the flour to make a roux.
Whisk in the milk to fully incorporate and simmer for about 15 minutes. Whisk in the nutmeg and remove from the heat. Reserve.
In a large mixing bowl, whisk together the ricotta, egg, and parmesan cheese. Reserve.
Heat a large sauté pan over medium-high heat and brown the ham. Transfer the ham to a plate and reserve.
Add the onion and mushrooms to the same pan and sauté until tender. Transfer to a plate and reserve.
Grease a 9x13 baking dish.
Cover the bottom of the dish with an even layer of noodles. Layer about 1/3 of the cream sauce on top, then 1/2 of the ham, then 1/2 of the mushroom and onion mix.
Top with another layer of noodles, then 1/2 of the ricotta mixture followed by 1/2 of the spinach.
Repeat both layer sets, then top with the remaining cream sauce and the mozzarella cheese.
Bake the lasagna uncovered for about 45 minutes, or until the cheese is beginning to brown and lasagna is heated through.
Remove lasagna from the oven and let it rest about 10 minutes before slicing. Serve hot.