In a large pot over low heat, caramelize onion until golden brown in a little olive oil, and season with salt and pepper. Stir occasionally, about 20 minutes.
Meanwhile, mix all other meatball ingredients in a large bowl, including onions when they are done. Form into meatballs and set on a sheet pan. They should be about ping pong to golf ball size, use a small portion scoop or ice cream scoop to make them equal in size. About 30 to 36 meatballs depending on the size. (At this point you can freeze or refrigerate meatballs, some or all, for later use, or try doubling the meatball recipe to really stock the freezer!)
Preheat oven to 400°. Over medium high heat, reheat the pan from the onions or use a clean large pan, add 1 Tablespoon olive oil. Brown the meatballs on one side, then flip and do the other side (about 2 minutes per side). Cook about 8 to 12 at a time in batches so you do not crowd the pan. When done browning the outside, return them to the sheet pan (don’t worry that it had the raw meatballs on them, you will be baking the whole thing).
Bake in the oven at 400° for about 10-20 minutes to finish cooking the meatballs through, cut one open to check.
Meanwhile over medium low heat, melt 3T butter in the same pot you browned the meatballs. Make a roux by mixing in the flour and letting it cook for about a minute while whisking, scraping up the browned bits from searing the meatballs.
Slowly whisk in beef stock, use enough stock to for a gravy-like consistency, you may not need the full quart. As the stock and roux mixture heat it will start to thicken into a gravy, whisk it occasionally.
When the meatballs are baked, add them to the gravy and simmer on low until ready to serve. Serve meatballs and gravy rolled in lefse.