In a large bowl, whisk together the yogurt, lemon juice, half of the garam masala, chili powder, turmeric, and half the salt.
Add the chicken chunks to the bowl, toss to coat evenly, and let marinate for at least 20 minutes at room temperature.
Melt 1 tablespoon of butter in a large skillet over medium-high heat. Add the marinated chicken pieces and cook until browned on all sides, about 5 to 7 minutes. Remove the chicken from the skillet and set aside.
In the same skillet, melt the remaining 2 tablespoons of butter over medium heat. Add the diced onion and cook until soft and translucent, about 5 minutes.
Stir in the minced garlic, fresh ginger, and the remaining garam masala. Cook for 1 minute until highly fragrant.
Pour in the tomato puree, stirring to scrape up any browned bits from the bottom of the skillet. Bring the sauce to a gentle simmer and cook for 10 minutes.
Stir in the heavy cream and return the cooked chicken pieces along with any resting juices to the skillet. Simmer for an additional 5 to 10 minutes until the chicken is cooked through and the sauce has thickened.
Garnish with freshly chopped cilantro and serve hot over steamed white rice alongside warm naan bread.