こんにちは。
私もあまり詳しくないのですが書き込みます。
そもそも論になってしまいますが、WordPress のタグのスラッグではハイフン(-)の使用が許可されていますので、 ?tag=A,B,C-D は A タグと B タグと C-D タグという 3 つのタグでリクエストしていると解釈するのが WordPress の挙動として自然です。ダメだったのも無理はないですね。
新しく除外タグを指定できるようなパラメータを準備し、 kurosquare さんがご指摘の通り pre_get_posts フィルタにて除外処理を行うのがとりあえずの落としどころかと思います。
以下に例を挙げますが、このコードのセキュリティ上の安全性はかなり怪しく、一切保証できませんので、あくまでヒントとしてお試しになり、感じをつかんだ上で、より安全なコードをご自分の責任で記述してください。また、本当は WP_Rewrite も触れないと、タグで絞り込む任意のループにまで影響するのでわりと問題ありです。ご了承ください。
以下をお使いのテーマの functions.php に追加し、除外したいタグのスラッグを extag=X+Y+Z などという形式でリクエストします。
function add_extag_query( $q=array() ) {
if ( $q->is_tag == false ) return;
$extag_query = $_GET['extag'];
if ( !empty( $extag_query ) ) {
$extags = preg_split( '/[+\s]+/', $extag_query );
if ( !empty( $extags ) ) {
$tag__not_in = array();
foreach ( $extags as $extag ) {
$extag = get_term_by( 'slug', $extag, 'post_tag' )->term_id;
if ( !empty( $extag ) ) $tag__not_in[] = $extag;
}
$q->set( 'tag__not_in', $tag__not_in );
}
}
}
add_action('pre_get_posts', 'add_extag_query');
公式ディレクトリにプラグインなどがあれば、そちらを使用される方が良いかと思います。こういうのはありそうな気がします。