4つあります。WEBアプリ、実行可能API、アドオン、ライブラリ、です。
最も手軽に使えるのはライブラリです。共有設定とインポートだけすればいいです。でも、共有設定があるのでソースコードは見えますね。
スクリプトプロパティに入れたら大丈夫、という考えもありそうですが、よく考えるとスクリプトファイル自体をコピーすれば自分のものになるので、結果として丸見えになります。あるいはeval()をして文字列からソースコードを生成する方式があるかもしれませんが、これもファイルコピーによってそもそもの文字列が何なのかを調べることはできます。
ところで、スプレッドシートは閲覧権限ではコピーできません、ダウンロードもできません(設定可能です)。こうすることでスクリプトをバインドさせておけばソースコードを守れるかもしれません。これも実はNGです。直接スプレッドシートから何かということはできません。スプレッドシートを開いてGASエディタを開こうとしてもそのボタンがアクティブではないのでコードを見ることはできません。とはいえライブラリにデプロイするということはスクリプトIDを引用させることになるため、結局、このIDに直接アクセスすれば見れてしまいます。なかなか恐ろしいですね。
ほんと、閲覧未満の権限設定が標準搭載されるといいのですが。
利用できるが中身は一切見れない権限です。スクリプト、スプレッドシートのファイルが存在することは確認できるが、中身は見れない。なかなか便利な権限だと思います。
一方のWEBアプリ、実行可能API、アドオン、ではどうかというと、これらに共通することはデプロイが必要という事。特に、実行可能APIとアドオンではGCP側の設定も付きまといます。なぜなら、デプロイするためにGCPプロジェクト番号の紐づけが必須になってしまっているからです。設定自体はそんなに難しくないのかもしれません。GCPプロジェクトを作成し、設定することはそんなにステップの多い事では無いです。ただし、どの設定をするとどの条件で動くのか、というのは体系的なものが見当たりません。(あったらごめんなさい)GCP設定をしたところで、公開アプリにするつもりもないので上限100人になります。人数制限無く使いたいけど公開して配るほどではないとき、はたしてこれで足りるのかというところも事例によっては出てきます。
また、ユーザー側にGCPの設定を毎回させるのか、それとも不要なのか、いまいちわからない部分があります。
たとえばデスクトップアプリって何?ウェブアプリ?と最初思うかもしれません。python等でローカルなどから実行するのか、ブラウザ経由での実行なのか、とかいろいろと分岐があるわけです。このとき、割と多くのブログサイトでは、権限は本人or全員(googleアカウント所有あり、不問のどちらか)、実行はデプロイ主として、となっていることでしょう。オーナーとしての実行であればオーナー1人のサービスアカウントがあればその識別子をコード側で利用するだけで済むので比較的楽と思います。信頼できる組織内であったり、自分だけ使う分にはいいでしょう。
ですが知りたいのは実行はアクセスしてきたユーザー本人として、のことです。ブラウザ経由でWEBアプリなどにアクセスする分には正常に動作します。ですのでその前提で作ればいいということでもありますが、Urlfetchだと403が返ってくることでしょう。これはgoogle側の掲示板でも割と目にする光景です。これについてはもしかしたらworkspaceライセンスのデプロイに、無料アカウントがアクセスできない、という前提があるのかもしれません。ただし、ブラウザ経由では正常動作をするため、この理解は間違っている気がします。このあたりから環境考えるのがめんどくなってくるのですが、おいおい追記します。