How it usually works is a reel band is created which represents the symbols that will spin through the reels. Usually this is as simple as a char array where each character represents an individual symbol:
{ 'A', 'L', 'K', 'T', 'T', 'B' .... etc }
(If you play a web based slot game with your browsers console window open, you sometimes capture the communication of the reel band strips from server to client on the Network tab!)
When the player hits the 'Spin' button an RNG will generate a number between 0 - length of the reel set and this will be the stop position for that reel. Once all stop positions for all reels are generated you'll have the final window and can then evaluate it for any winning prizes/bonuses.
Whilst all of this is going on in the background the player will just see a repeated set of symbols spinning through (Since you've already defined the reel band layout you just simply spawn images and move them down the screen). When it's time to stop you would then take the generated reel positions, spawn in the required symbols and have them enter the screen. This time however they won't fall out of the bottom and will instead stop in the required places.
Regarding actually creating a reel band which doesn't over-or-under pay, most people I've encountered tend to just brute force it through Monte-Carlo style simulations where they'll create a set of reels they think will have a decent hit rate and RTP (return to player) and then simulate several million-billion games to get the average wins. If it's too high they take away winning combinations, if it's too low they add more in until eventually it sits at a reasonable win-to-loss ratio (Usually around 95% averaged across a few hundred million - tens of billions of games).
Hope this helps!