◆ 関数の中でクラス定義してそのインスタンスを返してる関数
◆ 関数(クラス)の定義自体を呼び出しごとにしてるし なんかいや
◆ プライベートな変数をつくれはするけどなんか違う

こういうの
function fn(a, b){
return new C(a)

function C(val){
this.x = val
}
C.prototype.abc = function(){
console.log(this.x += b)
}
}

ここまで意味ないものでもなく return の前にいろいろあって 最後に返す値にメソッドつけたいときに最後に new してインスタンス化して返すもの

単純にオブジェクトを返すのじゃなくて クラス作って インスタンス返すところをみると毎回メソッド作ると無駄だから共通の prototype 使うようにってことかと思いました

ですがよく考えると そのクラス(関数)自体が関数の実行のたびに作られて意味無いように思います
fn の実行で返ってくるものは C のインスタンスですが その C は毎回違うものです
fn(1,2).constructor == fn(1,2).constructor
false

b の部分をプライベートにできる利点はありますが クラス自体が毎回別物だと なんというか気持ち悪いです