IMO this is because makeScopeXXXXXX and callPackage functions aren’t powerful enough:
EDIT: Where I was going with the linked snippet is that instead of feeding just a lambda into callPackage, we could say a “recipe” is a structure with a lambda and the metadata explaining how to fill in the lambda’s arguments. In particular, we could try and express the solution to your problem as “take X from the scope two levels up”
It is notable that we’re not discussing flakes anymore, it likely never was about flakes