How to keep a CPT from being visible on the front end?

I think that at least part of what you want is to alter the submission update messages, probably in addition to @toscho’s code.

function kill_message($messages) {
  global $post_type;
//   var_dump($messages); die;
  if ('your-cpt-slug' == $post_type) {
    // alter your message strings
  }
  return $messages;
}
add_filter( 'post_updated_messages', 'kill_message' );

If you var_dump the $messages variable it is pretty obvious what the messages represent. Just rewrite them however you want.