Set the foreground and background colors the same:
PS1='\[$(tput setab 0)$(tput setaf 0)\]hello\[$(tput sgr0)\]$ '
If your screen background color is different then you'll get a colored bar which will show, but the text will still be invisible. If you're using a mouse, you'll be able to select, copy and paste it and the pasted copy will be visible.
By using tput instead of hard-coding the escape codes, this will be portable to different terminal types. You can speed things up, though, if you define variables at the same time you define PS1 and use them in your prompt. That way, tput isn't called multiple times every time a prompt is issued.
back=$(tput setab 0)
fore=$(tput setaf 0)
none=$(tput sgr0)
PS1='\[$back$fore\]hello\[$none\]$ '
Edit:
To make apparent zero-width text included in the prompt, just backspace over it. To get the ^? just press Ctrl-v then backspace.
PS1='\[hello ^?^?^?^?^?^?\]$ '
To accommodate text of various widths:
PS1='This shows\[$(word='This doesn't';bs=${word//?/^?};echo "$word$bs")\]$ '
Using a variable would probably defeat your purpose of parsing for meta-data, but I include it for completeness:
text='Something to hide'
PS1='This shows\[$(word=$text;bs=${word//?/^?};echo "$word$bs")\]$ '
or
PS1='This shows\[$(bs=${text//?/^?};echo "$text$bs")\]$ '
Edit 2:
For that matter, you could do this:
PS1='This shows$(: This is hidden)$ '
Edit 3:
To make it more dynamic, use PROMPT_COMMAND to set PS1:
$ PROMPT_COMMAND="PS1='This shows\$(: '\$data')$ '"
This shows$ data="This is hidden"
This shows$ echo "Prompt: $PS1"
Prompt: This shows$(: This is hidden)$
This shows$ data="Top Secret"
This shows$ echo "Prompt: $PS1"
Prompt: This shows$(: Top Secret)$
Quoting can be a challenge. If you can avoid having single or double quotes in your data, the PROMPT_COMMAND technique will work OK.