Marinate the Chicken: In a large bowl, combine the yogurt, lemon juice, garam masala, ground cumin, ground coriander, turmeric, paprika, minced garlic, minced ginger, and salt. Add the chicken pieces and stir to coat evenly. Cover and refrigerate for at least 1 hour, or overnight for best results.
Cook the Chicken: Preheat your oven to 400°F (200°C). Line a baking sheet with foil and place a wire rack on top. Arrange the marinated chicken pieces on the rack and bake for 20-25 minutes until the chicken is cooked through and slightly charred. Set aside.
Prepare the Sauce: In a large skillet, heat the vegetable oil over medium heat. Add the finely chopped onion and cook until golden brown, about 5-7 minutes. Add the minced garlic and grated ginger, and cook for another 2 minutes until fragrant.
Add the Spices: Stir in the garam masala, ground cumin, ground coriander, turmeric, paprika, and cayenne pepper (if using). Cook for 1-2 minutes to release the spices' flavors.
Simmer the Sauce: Add the tomato puree, heavy cream, and chicken broth. Stir to combine and bring to a simmer. Let it cook for 10-15 minutes, stirring occasionally, until the sauce thickens slightly.
Combine and Serve: Add the cooked chicken to the sauce and simmer for an additional 5-10 minutes to allow the flavors to meld. Garnish with chopped fresh cilantro.