Heat oil in a large, wide-bottomed pan over medium-high heat. Add the cumin seeds and the chopped onion and sauté for about 10 minutes, until golden brown. Deglaze with 2 tbsp of water to encourage the onions to brown evenly.
Add garlic, ginger, and green chili and cook for 2 minutes, until aromatic. If the mixture starts to stick, deglaze with another 2 tbsp water.
Add the tomatoes, ground spices, and salt and continue to sauté for 3-4 minutes, until the oil starts to separate. If needed, deglaze again with 2 tbsp water.
Increase the heat to high and add the spinach, a handful at a time, and cook until wilted, about 5 minutes.
Reduce the heat to medium, cover, and cook for another 10 minutes, stirring once in between. If it starts to stick, add ¼ cup water.
Optional: Pan-sear the paneer in a separate pan until lightly golden on all sides, ~6-8 min in total.
Uncover the spinach and stir to mix. Allow it to cool for a couple minutes before transferring it to a food processor. Pulse to chop or blend on low into a rough purée.
Place the pan back over medium-high heat and add the ghee or butter. Once it melts, pour in the roughly puréed spinach. Sauté for a minute to fry the mixture. Add the measured water and stir.
Stir in the paneer, heavy whipping cream, and milk. Reduce the heat to low-medium, cover, and cook for 7-10 minutes, until the paneer has softened and soaked up the masala.
Crush the dried fenugreek leaves and sprinkle it in. Taste and adjust salt, if needed. Squeeze in the lemon juice and give it a stir. Sprinkle with garam masala, if using. Serve with roti, naan, paratha, or basmati rice.
