When the <meter> element in your example is created a copy of the current value of the $health variable is assigned to the value attribute of the element.
Updating the value of the $health variable will not result in the value being displayed by the <meter> element automatically changing as well. For the <meter> element to change you need to either:
1. Replace the existing <meter> element with a new one based on the changed value of $health.
<<set $health to 30>>
@@#health;<meter @value="$health" min="0" max="100"></meter>@@
<<link "Update health and replace meter">>
<<set $health += 10>>
<<replace "#health">><meter @value="$health" min="0" max="100"></meter><</replace>>
<</link>>
note: While this method works it is considered expensive because the existing meter element needs to be destroyed before the new one is created.
2. Use JavaScript or jQuery to update the value of the existing <meter> element.
<meter id="health" @value="$health" min="0" max="100"></meter>
<<link "Update health and meter">>
<<set $health += 10>>
<<run $("#health").val($health)>>
<</link>>
note: the above is making use of the jQuery <element>.val() function to update the meter's value.
warning: Neither of the above examples is checking to make sure that the new value of $health is within the minimum (0) and maximum (100) range. You may want to use the Math.clamp() function to do that like so.
<<set $health to Math.clamp($health + 10, 0, 100)>>