Heat 2 tablespoons of oil in a large skillet or Dutch oven over medium-high heat. Add the chicken in two batches, cooking until browned on all sides, about 5-6 minutes per batch. Remove the chicken from the pan and set it aside.
Reduce the heat to medium and add the remaining 2 tablespoons of oil to the skillet. Add the onions and cook, stirring occasionally, until they soften and turn translucent, about 5 minutes.
Stir in the ginger, garlic, and optional jalapeño. Cook for 1 minute until fragrant.
Add the chili powder, cumin, coriander, cardamom, salt, and black pepper. Stir constantly for about 1 minute to toast the spices.
Stir in the diced tomatoes and tomato paste. Cook for 2-3 minutes, breaking up the tomatoes with your spoon, until they start to break down and the mixture thickens.
Return the browned chicken and any accumulated juices to the skillet. Pour in the water and stir everything together, scraping up any browned bits from the bottom of the pan.
Bring the mixture to a simmer, then reduce the heat to low. Cover and cook for 15 minutes, or until the sauce has thickened and the chicken is cooked through.
Check that the chicken has reached a safe internal temperature of 165°F (74°C). Stir in the garam masala.
Garnish with fresh cilantro and serve hot with lemon wedges on the side.