If using fresh spinach, roughly chop it and place it in a large pot with 3 Tbsp water; cook over medium-low, stirring frequently, until wilted, then transfer to paper towels to drain. If using frozen spinach, thaw, drain thoroughly, and roughly chop.
Bring a large pot of salted water to a boil and cook the tortellini according to package instructions, reserving 1/2 cup of the pasta cooking water before draining.
Meanwhile, melt the butter in a large skillet over medium-high heat. Add the grated onion (including any juices) and sauté about 4 minutes, until soft.
Add the minced garlic and sauté 30 seconds more, then sprinkle in the flour and cook, stirring constantly, for 1 minute.
While whisking, slowly pour in the milk and season lightly with salt and pepper, keeping salt minimal because the Parmesan is salty.
Bring the mixture to a gentle boil, reduce heat slightly, then add the diced Neufchâtel and shredded Parmesan. Cook, stirring frequently, until the cheeses melt and the sauce is smooth.
Stir the chopped spinach and artichoke hearts into the cheese sauce and warm through.
Toss the cooked, drained tortellini into the skillet and stir in the chopped parsley. Add reserved pasta water a few tablespoons at a time to reach desired sauce consistency.
Serve immediately.