Cook the penne in plenty of boiling salted water to al dente. Before draining reserve a 1/2 cup of the cooking water.
In a large saucepan melt the butter over medium low heat and whisk in the flour. Cook 2 - 3 minutes, whisking often.
Slowly whisk in the broth then the half & half. Bring to a simmer and simmer 3 minutes, stirring often.
Add the spinach and bring back to a simmer. Use a stick blender to puree the sauce right in the pan. (If you don't have a stick blender, in batches, puree in a blender, holding down the lid with a towel so the steam doesn't blow off the top. Pour back into pan.)
Stir in the Parmesan cheese and season with salt and pepper to taste. Turn off the heat.
Butter a 9 x 13 baking/casserole dish.
Mix the pasta into the sauce along with the 1/2 cup reserved pasta water. Spoon into the baking pan and sprinkle with mozzarella.
Place the meatballs about an inch apart across the top, pushing them down a little into the pasta. Bake about 20 minutes until bubbly around the edges.
Let sit 5 - 10 minutes before serving with more Parmesan.