You just need to use an array and not a variable to pass the quoted strings.
declare -a curlArgs=('-H' "keyheader: value" '-H' "2ndkeyheader: 2ndvalue")
and now pass this array fully that way, the array expansion(with double-quotes) takes care of the arguments within double-quotes to be not split while passing.
curl "${curlArgs[@]}"
For more insight into why putting the args in your variables fail, see BashFAQ/050 - I'm trying to put a command in a variable, but the complex cases always fail!