If using fresh spinach, roughly chop it then place in a large pot with 3 Tbsp water; cook over medium-low, stirring frequently, until wilted. Transfer to paper towels to drain and squeeze out excess moisture. If using frozen spinach, thaw, drain well, and roughly chop.
Cook the tortellini according to package directions in the same or a separate pot, 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 cook 30 seconds more. Sprinkle in the flour and cook, stirring constantly, for 1 minute to form a roux.
Whisk in the milk slowly until smooth. Season lightly with salt and pepper, remembering Parmesan adds saltiness; you can adjust later.
Bring the sauce to a gentle boil while stirring, then reduce the heat slightly and add the diced Neufchâtel and shredded Parmesan. Cook, stirring frequently, until the cheeses fully melt and the sauce is smooth.
Stir the drained spinach and chopped artichoke hearts into the cheese sauce and warm through.
Add the cooked, drained tortellini and chopped parsley to the skillet and toss to combine.
If the sauce is too thick, stir in the reserved pasta water a few tablespoons at a time until it reaches your desired consistency (about 1/4 cup is typical). Serve immediately.