Mix the onion and breadcrumbs together in a large mixing bowl. Let the mixture sit for 2-3 minutes. Add the rest of the meatball ingredients, excluding the oil, to the bowl. Mix everything together well.
Using 2 tbsp at a time, depending how large you'd like them, form the mixture into meatballs. Dip your hands in water if you find the mixture it getting sticky.
Heat the olive oil in a large skillet over medium-high heat. Add the meatballs, working in batches if needed. Cook for 2-3 minutes per side until well browned. Transfer the cooked meatballs to a plate and set aside.
Add the butter to the skillet. Once melted, stir in the garlic and ginger, then cook for 1 minute. Add the passata, tomato paste, garam masala, smoked paprika, turmeric, cumin, coriander, and chicken broth.
Stir everything together and bring the sauce to a boil, then reduce to a simmer. Let the sauce cook for 10 minutes, or until slightly thickens. Stir in the cream.
Add the meatballs back to the skillet and let them simmer in the sauce for 5 minutes to heat through. Turn off the heat, garnish with cilantro, and serve.