Bring a large pot of water to a boil. Salt the water, add the pasta and cook to al dente. Drain, reserving 1/2 cup cooking water. In a large bowl, toss the pasta with 1 tbsp. olive oil.
Meanwhile, in a medium bowl, whisk the eggs and the Parmesan.
In a large nonstick or cast-iron skillet, heat the remaining 1 tbsp. olive oil over medium. Add the asparagus stalks, ham and onion. Increase the heat to medium-high and cook, stirring often, until the stalks are crisp-tender, about 4 minutes. Add the asparagus tips and garlic; saute until fragrant, about 2 minutes. Stir in the lemon juice.
Add the cooked pasta and the reserved cooking water to the skillet; season with salt and pepper. Toss until the pasta is hot, 2 to 3 minutes. Remove from the heat, add the egg mixture and quickly toss until combined and the sauce thickens slightly, about 30 seconds. Serve immediately.