What I'm worried about is the potential for configs to silently fail if external variables are not specified (or typo-d). Currently this cannot happen because if the evaluation of the config depends on an ext var that is not given, it will always halt execution. So that is a cue that you have forgotten to specify it. Having default values would break that behavior by silently using the default value, which may cause very subtle problems in the thing being configured.
Have you considered extending the jsonnet file with another one that overrides the number of replicated pods? This works pretty well for specifying the differences between dev / prod environments for example. You can use a hidden field $.foo in the master copy and then override foo in the jsonnet file that imports and extends it. If you want it to have a default, you define it with a value in the master copy. If you want to force people to specify then use error "You must specify foo" as the default value.
I don't use external variables that much as it's nice to have a "closed" config and not have to search in my bash history to find the right invocation :)