Heat olive oil in a large pot over medium heat. Add onion, carrots, and celery, cooking for 6-8 minutes until vegetables begin to soften.
Add garlic and cook for 1 minute until fragrant, stirring constantly.
Add lentils, vegetable broth, diced tomatoes with their juices, thyme, and bay leaf. Bring to a boil, then reduce heat to low and simmer.
Cook uncovered for 25-30 minutes, stirring occasionally, until lentils are tender but not mushy.
Remove bay leaf, stir in balsamic vinegar, and season with salt and pepper. Serve hot with crusty bread on the side.