In a large pot, heat oil over high heat until hot and shimmering. Add onion and sauté until soft, about 5 minutes.
Add garlic, ginger, and carrots and sauté until soft, a few more minutes.
Add cumin, coriander, turmeric, black pepper, cinnamon, and cayenne and sauté for 2 more minutes.
Add tomatoes, stock, 2 cups water, lentils, and salt and bring to a simmer. Partially cover, turn heat to medium-low, and simmer until lentils are soft, about 30 minutes.
If you want a less chunky soup, puree up to half of the soup and then add it back to the pot.
Stir in lemon juice and cilantro before serving.