If I understand correctly, you said this:
A caravan will spawn and will move from one location to another, carrying some special item. The caravan's spawn will be announced...
Players will be able to find the caravan and can choose to attack it. Upon killing the caravan's NPCs/mobs, the player will be able to get some special item, but will also gain karma.
Then, the player needs to find some NPC in order to clear his Karma.
Is this correct?
Most of this is possible with Jython. However, in order to make the caravan move, special code is needed. You'll need a timer (currently supported with self.addQuestTimer(name, time, npc, None)), some sort of array for the next destination (currently supported), and a way to find all NPCs within the caravan (also supported, though slow...if it's 1 NPC, you can pass it via the parameters; otherwise, you'll need to loop through spawntables or L2World).
Then you'll need code to make those NPCs move (supported via core functions ready for npc and character). Finally, you'll need to add the caravan NPCs in the script in "special" way, so that killing the NPCs adds karma to the player (easily supported with onKill).
For the NPC that the player's talk with (to clear karma, if I understood correctly), you essentially need a dummy quest and use of onTalk.
If you also wish to add the ability for players to protect the caravan against players that try to rob it, this is somewhat supported, as well. It would make things more fun

But also more challenging. One thing that is possible is:
Instead of the player gaining Karma onKill, make the player gain karma onAttack. At the same time, register that player for onDeath (so that the quest monitors when that player dies).
Other players can kill this player. Whoever kills him will be passed in onDeath, so you do stuff with him

In onDeath you can clear the karma of the thief, and you can reward some item to the person who caught the thief (special care required to ensure that the thief got caught by a player and didn't just die by a mob/guard).
I guess onAttack you can also save the player's xp so that you give them back after death, if xp loss is a concern
I like this idea

It can make a neat semi-pvp event
