有限状態マシンとは何ですか?
これは、イベントとそれらの間の移行の副作用を宣言する方法です。
  有限状態マシンのいくつかの実用的な使用法は何ですか?
このようなコードの代わりに:
function decide()
{
  if(mouseButtonIsDown && mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) {
    clearBuffers();
    startPlaying();
    cursorBecomeHand();
  }
  else if(!mouseButtonIsDown && !mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) {
  }
  // more ifs
}
いくつかの状態のみを保持し、イベントを関数に分割して、どの状態で何が起こるかを定義します。
function drag_started() {
 switch(your_state) {
   case "within_box":
    clearBuffers();
    cursorBecomeHand();
    your_state= "playing";
    startPlaying();
    break;
 }
}         
これにより、状態とイベントが分離されます。つまり、リグレッションが少なくなり、保守性が向上します。
  有限状態マシンを使用したくないのはいつですか?
この時点で自分自身に答えます。ステートが1つしかない場合は、ステートマシンを気にしないでください。
  有限状態マシン(JavaScript)をより詳細に説明している本、記事、チュートリアルなどはどれですか?
学界に対しては、jqueryプラグインのソースを読むことをお勧めします。たとえば、jqueryuiソースの_mouseMoveと_mouseUpの下を見てください