In a large Dutch oven over medium heat, add the vegetable oil and heat until shimmering, about 3 minutes.
Add the seasoned beef to the pan and brown on all sides, about 5 minutes.
Add the diced onion (reserving 2 tablespoons for serving) and minced garlic. Cook until the onion is soft and translucent and the garlic is fragrant, about 2 minutes.
Mix the cumin, chilli powder, cinnamon, and paprika. Add to the pan along with the tomato puree and bay leaf. Cook for an additional 2 minutes to coat the beef in the paste and spices.
Pour in the beans, chopped tomatoes, apple juice, and beef broth. Bring to a boil, then reduce to a gentle simmer. Cover with a tight-fitting lid and simmer for 3-4 hours until the beef is tender.
Serve with your choice of toppings and with rice if desired.