In a large bowl, stir together the yogurt, lemon juice, garlic, ginger, garam marsala, chili powder, cumin, paprika, salt, and pepper. Add the chicken pieces and stir until the chicken is well coated. Let the chicken marinate in the yogurt sauce for at least 30 minutes. You can refrigerate the chicken overnight.
In a large skillet, heat the oil over medium heat. Add the marinated chicken to the hot skillet and cook, stirring occasionally, until golden, about 4 to 5 minutes. Transfer the chicken to a plate and set aside.
In the same skillet, melt the butter over medium heat. Stir in the onion and cook until tender, about 3 to 5 minutes. Stir in the tomato paste, ginger, garlic, garam masala, turmeric, chili powder, paprika, cumin, and cayenne pepper and cook until well combined, 1 to 2 minutes. Stir in the diced tomatoes and chicken broth. Bring to a boil; reduce the heat and simmer, stirring occasionally, until sauce is slightly thickened, about 10 minutes
Stir in the cream and lemon juice. Add the cooked chicken back into the pan and cook until heated through, about 5 minutes.
Serve warm with rice and naan, if desired.
Garam masala is an Indian spice and can be found in the spice aisle at most grocery stores. Will keep covered in the refrigerator for 3 to 4 days.