Gather the ingredients.
Put beans in a large pot and add cold water to cover generously. Bring to a boil, cover, turn off heat, and let sit 1 hour.
Drain and return beans to pot. Cover again with cold water, bring to a boil, reduce heat to keep a simmer, and cook until beans are tender to the bite, about 20 minutes. Drain beans and set aside.
Meanwhile, preheat oven to 350 F. Wrap beets in a large sheet of aluminum foil, place on a baking sheet, and cook until tender when pierced with a fork, about 45 minutes. Let beets sit until cool enough to handle.
Peel beets (their skins should slip off easily after being roasted) and grate them on the large-hole side of a box grater. NOTE: Your fingers may get a little red, so wear gloves if you want to avoid stained hands. Set aside.
In a large pot over medium-high heat add oil, onions, and salt. Cook, stirring occasionally, until onions are soft, about 3 minutes.
Add garlic, if using, and cook until fragrant, about 1 minute.
Add cabbage, stir to combine, and cook, stirring occasionally, until cabbage wilts, 3 to 5 minutes.
Add caraway seeds and grated beets. Stir to combine.
Add broth and bring to a boil; reduce heat to maintain a steady simmer, add beans, and cook until vegetables are tender and flavors blend, 15 to 20 minutes. Add salt and lemon juice, if using, to taste. Serve hot, with a dollop of yogurt or sour cream and a sprinkle of dill, if you like.
