ドキュメントに記載されているように:
NPAPI ブラウザ プラグインは、本質的に、いくつかの特定のエントリ ポイントを持つ単純な DLL です。
つまり、通常の dll から一部の関数をエクスポートする必要があり、これは通常 C/C++ で行われます。残念ながら、プレーンな C# dll からエントリ ポイントを公開することはできませんが、この回答を見てください。何らかの努力をすれば、ある種のポスト ビルド ツールによって一部のエクスポートをだますことができるようです。
いずれにせよ、複雑なデータ構造をプラグイン インターフェイスとの間で受け渡しすることを期待しないでください。面倒です。さらに調査を行うことに興味がある場合、使用するキーワークは"reverse P/Invoke"です。これは、マネージド ワールドから通常の dll を呼び出す直接 P/Invoke と同様です。
C# dll が直接「エントリ ポイント」を公開できない理由は、 エントリ ポイントが実際には、すぐに実行可能なアセンブリ コードを指す dll 内のアドレスにすぎないためです。C# dll は別の種類の獣です。これらは、「ジャスト イン タイム」でコンパイルされた IL を含むファイルであり、実際にそのようなコンパイルは、いくつかの OS トリックで強制的に行われます。これが、reverse P/Invoke が単純明快ではない理由です。