Heat the olive oil over medium heat in large stock pot or Dutch oven. Add the onion and beet stems or celery and sauté until softened, 5 to 10 minutes. Add the tomato paste, garlic, caraway seeds, thyme, salt and pepper and stir for 1 minute.
Add the potatoes, carrots, beets and, if using, cabbage. Pour in enough water or broth to just cover the vegetables, between 6 and 8 cups. Bring to a boil, then turn the heat to medium-low and simmer partially covered until the potatoes, carrots and beets are tender, about 20 minutes.
Stir in beet greens or kale and lemon juice or vinegar to taste. Cook for another minute.
Ladle the borscht into bowls and sprinkle with a few tablespoons of fresh chopped dill and, if desired, sour cream.
Store leftovers in the refrigerator for a week. Borscht also freezes well. Go here for information on freezing food in jars.