3次元的な回転の変化量(回転速度)を制限したい場合、
単位クォータニオンのスカラ値の絶対値のacosでコントロールできます。
カメラが急激に振り返る現象を防ぎ、安定させたい場合に便利です。
upベクトルを鉛直方向に固定してgluLookAt関数を使っていると、
視点が極方向に近いところでは、急な回転をしていると思いましたので、
参考程度にクォータニオンを紹介致しました。

話を元に戻しますが、upベクトルに弾力性を持たせて対策するのであれば、
前フレームでgluLookAtに計算させた実際のupベクトルをgluUnProjectなどで求め、
それと鉛直上向きベクトルを適当な配分で合成して、
新フレームで与えるupベクトルにする、という方法を考えましたが、
回りくどいと思いましたので、回転行列もしくはクォータニオンを
使用する方法をお薦めします。

ちなみカメラをラインに沿わせる場合は、
ライン関数を微分したベクトルを正面にし、
それと直行するベクトルを適切な方法で決めて行列を作る方法が簡単です。