Heat the oil in a soup pot. Add the onion and sauté over medium-low heat until golden.
Add the sweet potatoes, carrots, and enough water to barely cover the vegetables.
Bring to a slow boil, then stir in the tomatoes, bay leaves and seasonings. Simmer gently, covered, until the sweet potatoes and carrots are tender, about 20 to 25 minutes. Remove and discard the bay leaves.
If using an immersion blender, add the beans and blend about half of the ingredients in the pot, giving the soup a chunky texture.
If using a food processor, transfer about half of the solid ingredients into the container, along with half of the beans and a little of the cooking liquid, then return to the soup pot.
Add enough nondairy milk to give the soup a slightly thick consistency. Season with salt and pepper, then return to the heat and simmer over very low heat for 10 minutes longer.
Serve at once, or let stand off the heat for an hour or two before serving, then heat through as needed. Top individual servings with parsley or cilantro, if desired.