Soak the beans overnight or about 8-12 hours. Drain and rinse.
In a large soup pot, heat oil over medium heat. Add onions, carrots and garlic. Season with a little sea salt and cook, stirring frequently, until onions are translucent and starting to brown, about 10 minutes.
Add all the other ingredients to the pot, except the lime, cilantro and avocado. Stir to make sure everything is combined.
Bring mixture to a boil before reducing the heat to medium and letting the soup simmer for about 2.5 - 3 hours, or until the beans are tender and creamy. Remove bay leaf.
At this point you can either keep the beans whole or puree using an immersion blender or traditional blender to your desired texture. I like to puree just until pieces of the beans are still visible. This makes the soup thick, but keeps a bit of the texture.
Taste soup and season with additional salt and pepper, if needed. Spoon soup into bowls for serving and garnish with avocado and cilantro. Serve with a lime wedge.