First some comments about your example:
1. The v1.2.4 version of Harlowe is no longer being developed and is only included with the Twine 2.x application so that older Projects or Story HTML files that were written using the 1.x series of Harlowe can be imported successfully.
I strongly suggest changing to the 2.x series (or maybe even the 3.x series when it is publically release) if you plan to use Harlowe for a new project.
2. Initialisation of story variables should ideally be done within your Harlowe project's startup tagged special passage, because that special passage is automatically processed before the first passage of your project is shown to the Reader.
3. When calling one of the conditional checking macros (like the (if:) macro) you shouldn't use the is operator if you are also using a mathematical comparision operator like >= or <=
<!-- GOOD comparison syntax. -->
(if: $number >= 12)[...]
(unless: $number < 6)[...]
<!-- BAD comparison syntax. -->
(if: $number is >= 12)[...]
(unless: $number is < 6)[...]
reason: The is operator represents the === (exactly equal to) mathematical comparision operator, so when you write something like $number is >= 12 you are writing the equivilent of $number === >= 12, which is stating that the current value of $number needs be both "exactly equal to" 12 and "greater than or equal to" 12 and that doesn't make sense mathematically.
The Harlowe TwineScript parser notices this contradiction and tries to resolve it by changing the original expression to $number >= 12 internally, but it is better if you do that yourself in your passage.
4. You used both the to operator and the = (equals) operation in your (set:) macros, you should try to be consisted with which assignment operator you are using.
I would suggest using the to operator, because a single equals sign = operator (which means assigment) is very easy to confuse with the double == (equal to) and triple === (exactly equal to) equal sign operators which can be potentually used for comparision.
5. When using a (set:) macro to increase or decrease a numerical value I suggest you use the special it reference in replace of the second instance of the variable name, this can reduce the risk of misspelling the second instance as well as reduces the typing needed.
(set: $number to it + 1)
is the same as
(set: $number to $number + 1)
6. You were trying to create what is commonly known as a Setter Link or a Link with Setter, which you do in Harlowe by combining a (link:) macro with a (set:) macro and a (go-to:) macro like so.
(link: "Link Text")[
(set: $variable to "a value")
(go-to: "Target Passage Name")
7. If I understand correctly only one of the two possible messages within the Check 2 passage should even be displayed to the Reader, which means that those two conditions are mutually exclusive. To achive that using (if:) related macros you need to change the second (or later) macro into either an (else-if:) macro or an (else:) macro depending on the exact circumstances.
(if: $number >= 10)[The number is "greater or equal to" ten]
(else-if: $number > 5)[The number is between five and nine (inclusive)]
(else:)[The number is less than 5]
(if: $nice >= 2)[Nice is "greater or equal to" two]
(else-if: $naughty >= 2)[Naughty is "greater or equal to" two]
(else:)[Neither Nice or Naughty is "greater or equal to" two]
Now on to the actual answer to your question...
1. Initialise your variables within your project's startup tagged special passage.
(set: $nice to 0)
(set: $naughty to 0)
2. Place the following in your Main passage.
Santa is checking on you.
3. Use Setter Links like the following in your Check 1 passage.
(link: "I've been nice")[
(set: $nice to it + 1)
(go-to: "Check 2")
(link: "I've been naughty")[
(set: $naughty to it + 1)
(go-to: "Check 2")
4. Use a series of condition checking macros like the following in your Check 2 passage.
(if: $nice >= 2)[Santa brings you presents.]\
(else-if: $naughty >= 2)[Santa brings you coal.]\
(else:)[Santa is still checking you.
You may notice I added an (else:) macro to your original example, this is because it was possible for both $nice and $naughty to be less than 2 at the same time, which means no message would of been displayed to the Reader.