Tokens are "stored" in the ledger not in a wallet. You can use a wallet to manage and transfer them with a better UI.
In stellar terms your tokens are Assets. They begin to "exist" on the ledger when somebody trusts the issuer who "created" them by setting a trustline first and then they receive a payment with that asset type. It's all about trust.
If you want to write a Stellar-powered solution, start with Stellar Development Guides.
All tasks from your list are very basic and all of them are described in the documentation, so without any doubts you will be able to implement your case. Just copy-paste a few blocks of code from docs, change some constants here and there (like token name or issuing ...
The issuing account doesn't actually need anything other than the normal 1 XLM, but any wallet that is going to hold your token will have to add a trust line, and doing that will increase its minimum balance by the base reserve amount (currently 0.5 XLM). So a Lumen-only wallet has a minimum balance of 1 XLM, but a wallet with your token would need 1.5 XLM.
Any token can be sent with a payment operation. Creating a payment operation requires a destination address, an asset, and an amount. From the issuing account, submit a transaction with a payment to your wallet. The account you're sending to needs to have a trustline to the asset.
That's right, the issuer account can mint unlimited new custom tokens by just transacting a regular payment operation without any further costs (except the regular ~0.00001 XLM per transaction fee as for any other transaction). In case you want to have a limited supply, you can mint all tokens at once and permanently lock the issuer account afterwards to ...
Send them to https://www.stellar.org/account-viewer and let them create their own accounts. Insist on saving their own public/secret key and not sharing it with any person or webpage.
Then ask them for the public key so you can send them one XLM in order to activate the account so they can check their balance and see everything is working fine.
Then they ...
If you want to make it secure, create a key pair directly in browser, and never send secret key over network (even if it's your own API).
With Stellar JS SDK:
//generate an account
var pair = StellarSdk.Keypair.random();
The stellar account viewer only allows sending XLM.
You can click on any of the wallets here:
And see which ones mention "Multiple Assets"
I personally use the stellar desktop app.
In addition, there are web services that allow you to send assets, for example: