Heat a large skillet over medium-high heat. Add ground beef and cook, breaking it up with a spatula, until mostly browned. Add diced onion and continue cooking until onions soften and beef is fully cooked, about 5-6 minutes total.
Add minced garlic to the skillet and cook for 30 seconds, stirring constantly. Drain excess fat, leaving about 1 tablespoon in the pan.
Add all spices (chili powder, cumin, smoked paprika, oregano, garlic powder, cayenne, salt, and pepper) to the meat mixture. Stir constantly for 1 minute to bloom the spices. Add Worcestershire sauce and cocoa powder if using.
Transfer the seasoned meat mixture to a 6-quart slow cooker. Add all beans, crushed tomatoes, diced tomatoes, tomato paste, and beef broth. Stir thoroughly until well combined and tomato paste is fully incorporated.
Cover and cook on LOW for 7-8 hours or HIGH for 4-5 hours until flavors are well developed and chili has thickened.
Taste and adjust seasoning as needed. If chili is too thin, remove lid and cook on high for an additional 30 minutes. Serve hot with desired toppings.