Melt the butter in a large pot over medium heat. Add the onions and garlic and cook, stirring frequently, until soft and translucent, about 8 minutes. Do not brown; reduce the heat if necessary.
In the meantime, cut the tips off of one bunch of the asparagus and set aside (you'll use those for a garnish). Cut the remaining spears and the other bunch of asparagus into 1/2-inch pieces.
Add the chopped asparagus to the pot (minus the reserved tips), along with the chicken broth, 1 teaspoon salt and 1/4 teaspoon pepper. Bring to a boil, then cover and turn the heat down to low. Simmer for about 30 minutes, or until the vegetables are very tender.
Meanwhile, bring a small pot of salted water to a boil. Cook the reserved asparagus tips for a few minutes, or until tender-crisp. Drain the tips and then place them in a bowl of ice water to "shock" them -- this stops the cooking process and preserves their bright green color. Once the tips are cool, drain them and set aside.
Purée the soup with an immersion blender until completely smooth. (Alternatively, use a standard blender to purée the soup in batches, then return the soup to the pot.) Bring the soup back to a simmer and stir in the lemon juice and Parmigiano-Reggiano. Taste and adjust seasoning, if necessary. To thicken the soup, allow it to simmer, uncovered, until the desired consistency is reached.
Ladle the soup into bowls, then top each bowl with asparagus tips, Parmigiano-Reggiano, herbs (if using), and freshly ground black pepper.
Freezer-Friendly Instructions: You can freeze the soup for up to 3 months. Defrost the soup in the refrigerator for 12 hours and then reheat it on the stovetop over medium heat until hot. (The soup will freeze best if you add the cheese when reheating.)