Cut the chicken into medium-sized pieces. Mix the yogurt, lemon juice, ginger-garlic paste, chili powder, cumin, coriander, half of the garam masala, and salt in a bowl. Add the chicken, coat well, cover, and refrigerate for at least 30 minutes.
Heat the vegetable oil in a large skillet over medium-high heat. Brown the marinated chicken in batches, then transfer it to a plate. The chicken does not need to be fully cooked at this stage.
Reduce the heat to medium and add 2 tablespoons of butter. Stir in the tomato paste and cook for 1 minute. Add the tomatoes and a pinch of salt. Simmer for 10-15 minutes until the sauce thickens and loses its raw tomato flavor.
Blend the tomato sauce until smooth, if desired, and return it to the skillet. Add the remaining butter and gradually stir in the heavy cream over low heat.
Return the chicken and any collected juices to the sauce. Add the remaining garam masala and crushed dried fenugreek leaves. Simmer for 5-10 minutes, or until the chicken is fully cooked and reaches an internal temperature of 165°F (74°C).
Taste the sauce and adjust the salt. Add a little sugar or honey if the tomatoes are too tangy. Garnish with fresh cilantro and serve hot with basmati rice or naan.