Você tem toda razão, para app comercial não é simples.
No meu caso, como freela que costuma criar apps personalizados para pequenas e médias empresas, eu já entrego o código-fonte junto — afinal, eles estão pagando justamente por isso.
Mas, se a ideia for criar uma aplicação comercial para venda em escala, aí sim: mandar só o .pyc continua sendo furada, porque dá pra reverter com ferramentas que estão por aí.
A boa notícia é que o cenário evoluiu bastante. Hoje ninguém confia em uma única camada de proteção — o jogo é combinar várias:
Empacotar como executável com PyInstaller ou, melhor ainda, Nuitka, que já ajuda a embaralhar o código.
Ofuscar com Cython nas partes críticas — ele converte pra C e complica muito pra quem tentar reverter.
Compactar/proteger o binário com UPX ou algum protetor de executável.
E, o mais importante: mover o core sensível pra Rust ou C++, compilado — aí sim, praticamente blindado (mas dá trabalho).
Dá pra fazer um ERP comercial em Python hoje sem medo — só não dá pra ser ingênuo. O segredo é empilhar camadas e ser estratégico.
Eu, pessoalmente, só fiz isso uma vez — pra uma empresa contábil que ia revender o sistema pra clientes da carteira dela.