EVs, Natures, and More
There's a lot of hidden stats and tricks you can put to use to make your team better than they would otherwise be.
Be careful with moves. This goes back to covering your weaknesses and enhancing your strengths. Pokemon can learn moves via breeding that they can't learn normally -- this is called an Egg move. Basically, Pokemon are divided into egg groups. If the mother Pokemon can't learn a move but the father Pokemon can, the offspring can have the move. This gets off-type moves onto Pokemon to cover all your bases. Be Careful! Leaving Pokemon in the daycare can overwrite moves, as they make decisions on their own when they reach move-learning levels. Pull them out to level yourself to make the decisions.
Manage your Roles. There are a few different roles your Pokemon can fill in your team, and you should design your team accordingly. Scout Pokemon knows moves like Volt Switch, and act sort of like decoys. They let you see what your opponent is doing, and switch quickly to avoid getting hit themselves. Walls are Pokemon with huge HP and Defense, which can soak up hits while the opponent mon takes poison damage, or give you time to focus on healing your damaged mons. Trappers use moves to lay out spikes and discourage your opponents from switching mons. Finally, Sweepers are your powerful offensive mons, who take advantage of high-speed and type advantages to cut down your opponents in one move.
EVs, or Effort Value points are special points you get depending on what you're fighting. Usually the primary attribute of a Pokemon is the stat it will give your Pokemon. A hard-shelled mon will give yours defense, or a fast one will grant speed, that sort of thing. You can only earn up to 255 EV points per Pokemon, and only 128 of them in a particular stat. You can gain 1-2 EV per battle, and it usually takes 4 EV to raise a stat by 1 point. Some effects, like certain items or the pokerus will add more EV. Be sure to plan these carefully if you intend to fight at a top-tier level! It's expensive and time-consuming to reset them.
Pay attention to Natures and Abilities. These are visible attributes if the Pokemon you get and can greatly affect their usefulness. Natures will boost a stat and lower another, allowing you to more carefully minmax your stats, if that's your cup of tea. Abilities will trigger under certain conditions: counter attacks, ignore weather, reveal items, and other effects. Try to select ones that are useful to you.
Know Your Enemy. If you're facing off against your friends, you should be able to know what sort of types they prefer, or what they're likely to do, and build your team accordingly. This is called the Metagame. They'll likely react to your choices the next time you face off, and your team will evolve accordingly. For more competitive play, the Metagame changes depending on the Tier list you're using, and what the large number of other players are doing.
Know your Tier. This is only relevant if you're playing competitively online. Pokemon are relegated to Tiers by the community. Your team falls into the tier of your highest tier Pokemon. A team of 5 never-used Pokemon and one Uber Pokemon will be an Uber team, so watch out! The tiers are Uber, Overused, Borderline, Underused, Borderline2, Rarely Used, Never Used, Little Cup, and Limbo. You can learn more about tiers and if your Pokemon is in which tier by checking out Smogon University.
With all of this information at your fingertips, you should be able to piece together a team to take down whatever opposition you would like. Just bear in mind that no one team is perfect. Human error and type advantages can get even the best team defeated, and you'll just have to build a new variation, and on and on. That's the beauty of Pokemon! It's well-designed enough to allow a varied and prolific metagame. Take advantage of it!