Using a large bowl, mix all of the ingredients by hand until throughly combined. Roll out medium-sized meatballs (about 1 1/2 inch in diameter) and place them in a large pre-heated (medium) skillet with some olive oil. Sear for 5 minutes, turning carefully until browned.
Place the meatballs on a sheet tray lined with parchment paper and bake in a 350 degree oven for 15 minutes. Remove and set aside.
Bring a skillet to medium heat and then toast the dried guajillo peppers for 2 minutes per side. Remove the skillet from the burner and reserve the peppers.
Increase the burner heat to medium-high and add the chiles, tomatoes and garlic to a medium saucepan. Cover with water and bring to a boil. Reduce the heat to medium and simmer for 15 minutes until the peppers have rehydrated and the tomatoes are slightly mushy.
Place the seeded peppers, tomatoes, garlic, and half of the chopped onion in a blender with 1 cup of the water from the saucepan - puree until smooth.
Heat olive oil in a large soup pot or Dutch oven, use medium heat. Add the roughly chopped carrots, celery, and remaining onions and sauté for 5 minutes, stirring occasionally, until they are slightly softened. Add the garlic and cook for an additional 2 minutes.
Add the tomato puree mixture and cook, stirring until it thickens and deepens in color (about 10 minutes). Add the beef stock, cumin, and meatballs and cook for 15 minutes.
Garnish with chopped cilantro and serve hot.
If your soup is not thick enough for your taste, add 1/4 cup of tomato paste when adding the beef stock. Stir to incorporate.