I agree that level curves are often difficult for people to get right without putting a significant amount of effort playtesting and adjusting the difficulty curve extensively. Let's face it, it's nearly impossible to get right on the first try or as you're going along.
With that said, I myself am not a fan of having to grind, and would rather use an underleveled team strategically to win. I think the wonderful thing about Pokemon (at least up until Gen 6 and it's Exp. Share mechanics) is that the player has a way to adjust the difficulty on their own with their party choice. More specifically, they can choose to actually raise less than 6 Pokemon, in an effort to keep up with a standard curve with minimal grinding at the expense of possibly lacking extensive type coverage. This is a significant boon to the player, as they can decide early on if they want to grind and field a full team. I feel that this is part of the reason Game Freak has necessitated an HM slave or two as well. It's easier to push the young or inexperienced player into a less grindy curve by forcing them to keep HM slaves.
Basically, if a hacker is going for the standard Game Freak difficulty, there are a couple of things they have to keep in mind. First, they have to make sure that the Pokemon distribution for the player AND for NPCs isn't lopsided in one side's favor or otherwise ridiculous for the point in the game that the player is in. That means no Thick Club Cubone on the first route, or anything with similarly high/abusable BSTs early on. Second, if the player is playing with a full team of six, they should find themselves several levels behind the "bosses" by the midgame if they battle all of the Trainers and don't grind on wilds. If they're fielding a team of four, they should be right around the same level. (This is how I've found it generally playing the vanilla games. Your mileage may vary). Third, outside of bosses, each area's level curve should remain relatively flat. A route should not have a random level spike. Generally, the hacker should have a level in mind for the route, and not deviate more than a level up from that. Difficulty should be determined by how many Pokemon the Trainers have, not by giving one Trainer a level 30 Pokemon in an otherwise level 22 area. As a general rule, the more Pokemon a single Trainer has, the lower their levels should be. Obviously, BSTs will factor into this as well. If a Pokemon Breeder has 5 Sunkern and a Sunflora, I would argue you're okay keeping them at the maximum level for that route. Conversely, if one of your Ace Trainers is packing a Garchomp and 3 other Pokemon in Victory Road, you may want to lower the levels a bit or make sure you're not giving him or her other high BSTs. Even if you NEED the Ace Trainer to have pseudo-legendaries for some reason, consider giving him lower stages of them. A Garchomp and a Dragonair are much more manageable than a Garchomp and a Dragonite. Fourth, you should strive to keep the wild Pokemon relevant to the player. This basically means that you shouldn't severely underlevel the wilds or bottleneck their variety once you've passed the opening segment of the game. Make sure the player has plenty of chances to catch what they may need to get through a difficult encounter without forcing them into cheesing every fight with the perfect counter with a satanic level curve. You should also strive for variety. If the player is possibly going to need a team member to counter a Fighting-type Gym in the midgame, throw them a few different Psychic and Flying-type Pokemon their way. Or even mess with learnsets so that something they're bound to have will learn a move with appropriate coverage by then.
Basically, hackers need to open up and stretch out their difficulty curve instead of throwing spike after spike. If your hack is of standard length (to the Elite Four and that's it) and your players are up in the high 80s by the end, you've probably done something wrong if you went for a Game Freak-esque curve.
Despite everything I just said, I personally will do anything not to grind, and am known for beating RPGs with severely underleveled teams. If I remember correctly, I beat Final Fantasy 9 as a kid for the first time with a team of level 39s. That sort of strategic challenge makes memorable gameplay for me. Nowadays, I'll simply cheese games or encounters that I feel are unfair before I'll repeatedly bash my face against them. That is not how you want your players to react to your difficulty curve.