Heat the oil in a medium Dutch oven or heavy pot over medium heat. Add half of the onions and cook, stirring occasionally until soft, about 5 minutes. Stir in the chili powder, cocoa powder, garlic powder, cumin and cayenne. Continue to cook until lightly toasted, 1 to 2 minutes. Add the beef, 1/2 cup of the beef stock and 2 teaspoons salt. Cook, breaking up the meat, until it's no longer pink, about 5 minutes.
Add the remaining beef stock, the tomatoes, tomato sauce and bay leaf. Simmer the mixture over low or medium-low heat, uncovered, until the chili is thick but still soupy, 1 1/2 to 2 hours. While the chili cooks, skim off any excess fat that floats to the top. If using the kidney beans, add during the last 10 minutes of cooking. Discard the bay leaf and season with salt.
When ready to serve, bring a large pot of salted water to a boil and cook the spaghetti according to package directions.
Divide the spaghetti among the bowls and top with the chili, the remaining onions, the Cheddar and sour cream. Serve with the oyster crackers, apple cider vinegar and red wine vinegar on the side.