In a large bowl, combine the chicken pieces with yogurt, ginger-garlic paste, and lemon juice. Mix well to coat every piece evenly. Cover and let it marinate for at least 30 minutes, or up to 4 hours in the fridge.
Heat the vegetable oil in your skillet over medium heat. Add the finely chopped onions and sauté until golden brown and soft, about 8-10 minutes.
Sprinkle in the garam masala, cumin, coriander, turmeric, and red chili powder. Stir constantly for 1-2 minutes to toast the spices and release their aromatic oils, being careful not to burn them.
Pour in the pureed tomatoes and stir to combine. Let the mixture simmer on low heat for about 10 minutes, allowing the sauce to thicken and mellow.
Add the marinated chicken pieces to the sauce. Stir well to coat. Cover and cook on medium-low heat for 15-20 minutes, stirring occasionally until chicken is cooked through and tender.
Reduce heat to low and slowly stir in the heavy cream. Adjust salt to taste and cook for another 5 minutes to meld flavors.
Sprinkle freshly chopped cilantro over the top. Serve with basmati rice or warm flatbread.