Heat 2 Tablespoons Oil (i.e., Olive Oil) in a large Dutch oven or soup pot over medium heat. Add the chopped onion, celery, and carrots. Cook, stirring occasionally, until the vegetables are soft (about 10-15 minutes)
Stir in the spices, except for the lemon (or lime juice) and fresh cilantro.
Pour in the beans, broth, and water (if using). Cover and bring to a simmer over medium-high heat. Cook, reducing the heat as needed to maintain a gentle simmer for about 2.5-3 hours (or until the beans are tender).
At this point, you can either keep the beans whole or puree using an immersion blender or traditional blender. If using an immersion blender, blend a portion of the soup directly in the pot until desired texture is reached. If using a blender, transfer about 4 cups of the soup to the blender, securely fasten the lid, and blend until smooth. Return the pureed soup to the pot.
Stir in the lemon (or lime) juice and fresh cilantro.
Taste the soup and season with additional salt and pepper, if needed.