I think there are several reasons. First, if you do it with an int, you're probably using up 32bits per value. You'd need 1 but waste the other 31, they needlessly take up storage. (Edit: Though your bool will most likely take 8 bit anyways due to other things.) And then sometimes it's nice to be expressive. So no one needs to remember if 1 is True or 0, or if True is greater than False, whether 2 or -1 map to True or False. And you end up in situations where either 2 equals 1, or True isn't always equal True. Or you do weird things to handle values other than 0 and 1 in the operations. All of that can be avoided and the code gets more readable with specific types.
There's nothing wrong with using ints, though. You just have to make sure the maths stays consistent.