Yeah, we only tried B.D. Joe out in one race and had no mods unlocked for him. That one race made him seem unimpressive, but we didn't really have the time to explore everyone in depth (this was a one day play session) and anyone who initially didn't impress didn't see additional play (and we managed to miss Tails completely even with that!). If he's working for you, that's great; I'm certainly not in a position to make a strong argument that any character is garbage or anything so much as I'm just able to share how everyone seemed at a first glance.
We only played the one mode, the career mode, so I can't comment on the battle mode. A few of the types of challenges did involve battle mechanics in the sense that you had to take out other racers or even a boss styled "Veteran Tank" in which it's just all about dealing out damage to targets while avoiding getting hit by items. None of those challenges seemed very hard largely because the projectile attacks in this game are very, very fast to the point that if you're steady and precise it's not really reasonable for the other player to avoid them. I'm not really sure how a battle mode would work out in light of that since, while things like homing projectiles are much weaker than in Mario Kart, I think among good players projectiles are going to be much harder to avoid in the long run in this game than in Mario Kart just due to their speed.
As per the difficulty, everyone has different levels of skill and we had a real advantage by playing local co-op (only one of us had to win any given race or challenge for the account to be flagged as winning it, and we tried to help each other out to the relatively meager extent we could). Generally we expected to lose everything badly once or twice so we could begin to learn track lay-outs and challenge dynamics; if you just keep trying and begin to integrate muscle memory and track strategy developed on prior runs you'll be amazed at how much better you can do. Eventually you just get really lucky like getting an All Star power in 3rd place or getting a couple of hot rod items throughout the race which is really helpful and can easily put you over the edge. Sometimes you can use some clever tricks to get ahead too; the most useful shenanigan we found was a way to get a couple second advantage on the "beat a ghost's lap time" challenges. You get one boost per lap and have to exceed some time; the idea is to save your boost until the very end of the first and second laps and use it right before you cross the finish line. You'll cross still having the high movement speed of the boost and then get your new boost for the lap so you can effectively get two boosts in that lap which makes beating those (very tough) times easier since you have one more boost than the ghost did.