In a large pot or Dutch oven, heat the olive oil over medium heat. Add the onion, and saute for 3-4 minutes, or until just starting to soften. Add the beef, breaking it up with a spoon. Allow to cook undisturbed for several minutes, then flip, continuing to cook, stirring occasionally, until no pink remains. Drain off any excess fat.
Stir in the garlic and saute until fragrant, about 30 seconds. Season the beef to taste with salt and pepper.
Stir in a little broth, and use it to deglaze the pan, scraping up any browned bits from the bottom of the pan. Add the rest of the broth, crushed tomatoes, diced tomatoes (if using), oregano, basil, and parsley.
Turn the heat up to high and bring the mixture to a boil. Stir in the shells. Continue to cook at a low boil with the lid halfway on for about 10-12 minutes, or until the shells are cooked through.
Reduce heat to low. Stir in the cream cheese, allowing it to melt. Serve immediately.