簡単な解決方法としては、'foo = ->' と書くのではなく、'window.foo = ->' と書くと良いようです。
例えば下記のようなCoffeeScriptの関数hogeがあったとして、
# coffee.coffee
hoge = ->
console.log("hoge")
return
これを以下の静的htmlから呼ぶ場合、
<html>
<head>
<script type="text/javascript" src="./coffee.js"></script>
</head>
<body onload="hoge();">
</body>
</html>
CoffeeScript側をひとまずwindow.hoge = ->とすることで実行することが可能です。
# coffee.coffee
window.hoge = ->
console.log("hoge")
return
真面目にやるなら名前空間を定義してその中で完結させるのが良いみたいですね。
もうひとつlazyな方法として、コンパイルの際に-b(--bare)を指定することで、即時関数でラッピングせず、グローバル変数として扱う方法があるようです。