You could try marking the fields with IDs (I used "difficultyName" and "difficultyDesc") and attach a click handler to your <<cyclinglink>> which sets their contents. Don't forget to set the contents initially, of course.
Additionally, I marked the <<cyclinglink>> macro with the "difficultyChooser" ID to make sure you can have more than one of those in the passage without the events getting fired for all of them. The resulting passage would look somewhat like this.
<p>Difficulty is currently: @@#difficultyName;$difficulty@@
Change difficulty to: @@#difficultyChooser;<<cyclinglink "$difficulty" "Easy" "Normal" "Hard">>@@
<<script>>
jQuery(() => {
var showDifficulty = (diff) => {
jQuery("#difficultyName").empty().append(diff);
jQuery("#difficultyDesc").empty().wiki('<<if $difficulty eq "Easy">> In easy difficulty, enemies are easy to outmaneuver. The player is greatly favoured in luck draws. Extra stat points are rewarded for each level up. Characters will be very forgiving. Saves points and tips are provided regularily. <<elseif $difficulty eq "Normal">> In normal difficulty, enemies are more challenging, but no time restrictions are given during combat. Luck draws are balanced. Save points are given several times during each chapter. Tips are provided in critical situations. <<elseif $difficulty eq "Hard">> In hard difficulty, enemies are tougher and more cunning - they will fight you to the best of their ability. The player is handicapped in luck draws. Characters will remember every word you say to them. <warning>Warning</warning>: No save points will be provided! The story will autosave with your progression; there is no going back on any of your choices. <<endif>>');
};
jQuery("#difficultyChooser a.cyclingLink").click(() => showDifficulty(State.variables.difficulty));
showDifficulty(State.variables.difficulty || "Easy");
});
<</script>>
@@#difficultyDesc;...@@
<<return>>
</p>