Stellar does not use the type of smart contracts you are used to, but it has operations that can support most use cases.
Creating a new token on top of Stellar is trivial. All you need is for existing accounts to send a transaction with a change trust
operation which states that they trust XTOKEN issued by the admin account. Once this happens, the admin account can send (or airdrop) them tokens which they can transfer amongst any "trusting" users. The admin account has an unlimited supply of this token (for all practical purposes), and can "create" them simply by sending them to other accounts.
The burning of tokens is achieved simply by sending them back to the issuer (the admin account, in this case). Note that burning tokens is usually only meaningful if the supply is limited, which is not the case you are describing.
You will reach the same gas problem you reached with Ethereum, but you will reach it sooner, and it will be a smaller problem. All Stellar transactions require a fee to be paid in XLM, but it is a smaller problem since this fee is only meant as an anti-spam mechanism and not to cover miner expanses (and since there are no real miners, and the cost of running a node are relatively small) so are really very small. You will encounter it sooner because every account in Stellar has to be funded with XLM. This is important, so I will say it again: to create a new Stellar account you HAVE to transfer some XLM into it. This makes airdrops a bit trickier.
Let me describe the current mechanism we (the PAKET Project) are using in our mobile app when a new user registers:
1. The app generates a keypair for the user and asks him to back it up
2. The app sends the public key to our server, which creates and funds this account with XLM (this is done at our expanse, so we added an SMS verification process and limited it to one account per phone number)
3. Once the account has been created, the app sends a change trust
transaction to trust our token (BUL)
4. Our server sends tokens to the new account
Another scheme, used in bifrost, is to create an account with a keypair that is known to the creator (you or your company), which lets you send the change trust
transaction on your own, and then revoke this known keypair and add a new one which is only known to the user. Perhaps this will suit your purpose better.