Here,
bash -c date +%z
The first non-option argument after the -c is date, that's the command line Bash will parse and run. The arguments after that are assigned to $0 (here, +%z), then the positional parameters $1, $2 ... (all unset here).
The string +%z is not discarded, but since the command date does not make use of $0 (or $1 etc.) it does not affect what the shell does.
You'll need to pass a command that uses the shell name in $0 or the positional parameters $1..., e.g.:
% bash -c 'echo "shell name: $0", first arg: "$1"' foo bar doo
shell name: foo, first arg: bar
Though if you want to pass the argument list to another command as-is, you'd rather use "$@" (with the quotes) which expands to all positional parameters as distinct fields (as if you'd used "$1" "$2" ... for all the set positional parameters).
So (assuming GNU date for -d):
% bash -c 'date "$@"' sh +"%F %T" -d '1 Jan 2001'
2001-01-01 00:00:00
(Here, that sh goes to $0 and gets only used if the shell needs to print an error message. In any case, we need to pass some value there as $0 is filled before the positional parameters.)