
Heat oil in a large pot or Dutch oven over medium heat. Add onion and cook for 20 minutes, stirring occasionally, until onions begin to caramelize.
Add bell pepper, carrots, celery, serrano chile and garlic. Raise heat to medium-high and cook 10 minutes, stirring occasionally.
Add chili powder, cumin, paprika, oregano, salt and black pepper. Stir to combine and cook for 1 minute.
Add broth, diced tomatoes, kidney beans, black beans, and hot sauce. Stir together and bring to a boil. Reduce heat to low and simmer for 45 minutes to 1 hour, uncovered, until the thickness of the chili is to your liking. The longer it simmers, the thicker it gets.
Remove from heat, mix in fresh lime juice and taste. Season with more salt if necessary.
Serve in bowls topped with shredded cheese, sour cream, cilantro and more hot sauce if desired.