これ、try-catch中の変数の変化を取得できてないのかな?と思い検証.

{{-- blade --}}

@if(session('message'))
    <ul class="list-group">
        <li class="list-group-item list-group-item-success">{{ session('message') }}</li>
    </ul>
@endif
//controller

//成功チェック
$success = false;

try
{
    DB::transaction(function () use ($success) {
        //登録処理
        DB::insert($data);
        $success = true;
    });
}
catch(Exception $e)
{
    $success = false;
}

//成功メッセージの表示
if($success)
{
    return redirect('cbt/user')
    ->with('message', '成功しました'); //ここが出力されない
}
else//TODO
{
    return redirect('cbt/user')
    ->with('message', '予期せぬ状態'); //ここが出力される
}

間違っていた箇所はフラグの変更位置.
	DB::transaction(function () {
	    //登録処理
	    DB::insert($data);
	});
	
    $success = true; //transaction外でフラグを変更.

どうやら、transaction内部ではDBでの処理が完了し次第、スコープの外に出てしまうようです. 以下のような処理にしても、returnしてくれなかった.
	DB::transaction(function () {
	    //登録処理
	    DB::insert($data);
	    
        return redirect('cbt/user')
        ->with('message', 'これはtransaction内からのredirectです');
	});

まとめ

transactionメソッド中では、DB接続が終了し次第 exit 状態となるため、DB処理の後ろで何かやっても無意味!!!