In a large bowl, whisk together the yogurt, half of the minced garlic, half of the grated ginger, 1 tablespoon of garam masala, lemon juice, and salt. Add the chicken pieces and toss to coat completely. Cover and refrigerate for at least 30 minutes.
Heat a large heavy-bottomed skillet or cast iron pan over medium-high heat. Add 1 tablespoon of oil or ghee. Working in batches, add the marinated chicken and cook until browned on all sides, about 5 to 7 minutes. Transfer the chicken to a plate and set aside.
In the same skillet, reduce the heat to medium and add the remaining oil or ghee. Add the diced onion and saute until softened and translucent, about 5 minutes. Stir in the remaining garlic and ginger, cooking for an additional 1 minute until fragrant.
Stir in the remaining 1 tablespoon of garam masala, ground coriander, ground cumin, turmeric, and tomato paste. Cook for 1 to 2 minutes, stirring continuously, to toast the spices and deepen the color of the tomato paste.
Pour in the tomato puree, stirring well to scrape up any browned bits from the bottom of the pan. Bring the sauce to a gentle simmer and let it cook for 10 to 15 minutes to allow the flavors to meld and the sauce to thicken slightly.
Reduce the heat to low. Stir in the heavy cream and return the browned chicken to the skillet, including any resting juices. Simmer gently for another 5 to 10 minutes, or until the chicken is cooked through and the sauce is rich and creamy.
Garnish with freshly chopped cilantro and serve immediately alongside warm basmati rice and naan bread.