Heat the oven to 350°F and line a 9x13-inch baking pan with parchment, leaving a bit of overhang for easy removal; lightly spray the parchment with nonstick spray.
Whisk together the flour, baking powder, baking soda, salt and ground cardamom in a medium bowl; set aside.
In the bowl of a stand mixer (or a large bowl with an electric mixer), beat the softened butter, vegetable oil, sugar and lemon zest on medium-high until pale and fluffy, about 3 minutes.
Add the eggs one at a time, beating just until combined after each addition and scraping the bowl as needed. Stir in the vanilla.
In a small measuring cup combine the milk and lemon juice. With the mixer on low, add about a quarter of the dry ingredients, then half the lemon-milk, then another quarter of the dry, then the remaining lemon-milk, finishing with the remaining dry — mixing each addition only until just incorporated. This alternating method keeps the batter tender.
Using a large spatula, fold the shredded zucchini into the batter until evenly distributed. Avoid over-mixing to keep the cake light.
Transfer the batter to the prepared pan, smoothing the top. Bake on the center rack for 32–38 minutes, or until a toothpick inserted near the center comes out with a few moist crumbs attached.
Let the cake cool in the pan on a wire rack for 10 minutes, then lift it out using the parchment and let cool completely before frosting — about 45–60 minutes. Chilling the cake briefly makes spreading the frosting easier.
Make the frosting: beat the cream cheese and butter together until smooth and lump-free. Add half the powdered sugar and mix on low until combined, then add the vanilla and remaining powdered sugar and beat until light and spreadable. If the frosting is too soft, chill 10–15 minutes to firm slightly.
Spread the frosting evenly over the cooled cake. Decorate with extra lemon zest or thin lemon slices if desired. For neat slices, chill the frosted cake 20–30 minutes to set the topping, then cut.