agreed. a boolean check with a variable would do just as well, instead of using a value - which works too, but isn't as 'clean'. keep your _cankill value of 1 or 0, that part is fine. just introduce a global variable, call it 'kill_reset' or something, and set it to false. best place is probably the init.sqs file. your script would then read as follows:
#loop
_cankill = _this select 0
?(_cankill ==1):goto "can_kill"
?(_cankill ==0):goto "cant_kill"
#can_kill
?(not alive taker): titletext [format"Hostage taker eliminated", "plain"] ; exit
~0.5
goto "can_kill"
#cant_kill
?kill_reset : exit
?(not alive taker): [hostage] exec "blowbomb.sqs" ; exit
~0.5
goto "cant_kill"
exit
that way, when you want the taker to be killable, you simply use
kill_reset = true
~1
[1] exec "cankilltaker.sqs"
the pause is to let the script realise kill_reset has been changed and exit. then you can call it again with the new variable.
a couple of other things:
the use of && is incorrect here - if you wish to have other commands following your 'then' statements, use a semi-colon.
also, add in a slight pause in your loops, otherwise you run the risk of introducing lag.
hope you're having fun editing - keep at it, you seem to have the basics down