Heat oil in a heavy pot or Dutch oven over medium-high heat until shimmering.
Add beef, season with salt and black pepper, and brown on all sides in batches. Remove and set aside.
Add onion to the same pot and cook until softened, then stir in garlic briefly.
Sprinkle flour over the mixture and stir until evenly coated.
Add chili powder, cumin, and oregano, cooking briefly to release aroma.
Pour in beef broth, water, and tomatoes. Add jalapeño or serrano if using.
Bring to a gentle simmer, cover, and cook on low for 1 to 1½ hours.
Taste and adjust seasoning, removing whole pepper if used.
Serve hot with Mexican rice and warm flour tortillas.