Heat the vegetable oil in a large soup pot over medium heat. Add the onion and sauté for 8-10 minutes, until golden brown.
Add minced garlic. Stir another minute.
Add canned tomatoes with their juices to the onion-garlic mixture. Allow to cook for about 3 minutes, stirring occasionally.
Add beef broth to soup pot. Raise temperature to high and bring to a boil.
When the stock is boiling, add half of the meatballs, dropping them carefully by hand in various places in the pot so that they don’t stick together. Cook for 5 minutes. Using a slotted spoon, remove the meatballs from the stock and place in a bowl. Don’t worry if a few bits of onions and tomatoes are in the bowl as well. (They will return to the soup later with the meatballs).
Return the stock to boiling. Repeat the process with the remaining meatballs. Set meatballs aside.
Add 3 tablespoons of uncooked rice, carrots, celery, and potatoes to the stock. Stir well. Bring to a boil, then reduce heat to simmer. Cover the pot and cook for 15 minutes.
Add meatballs along with any accumulated juices in bowl to soup pot; stir gently. Cover and continue simmering for 30 minutes.
Ladle soup into bowls. Garnish with chopped cilantro, if desired.