Charisma and Speech can be handled by a simple ability. As for the no karma loss, I can't write the script from the top of my head, but I'd create a global that is set to the player's current karma when the follower is hired, and then in the script I'd check if the player has the new companion's perk, and if yes then check if the player's karma is lower than the global, and if yes then set player's karma to the value of the global. Or if you can't set the value directly I'd make it calculate the difference between the current value and the global and then reward the palyer with that amount of karma. However, this would still display the message that you lost and gained karma.