Rattle, 54 44 bytes
Fizz&Buzz|!I=[g+bs%3[0b0b^0]g%5[0b1b^0]B]100
This [was] my first answer in my new programming language! (This answer has since been golfed, and works on my new online interpreter)
Eventually, this programming language might have a more concise way to solve this challenge.
^this ended up being true - after a couple updates, 10 bytes can be shaved off the original answer (without implementing trivial built-ins)
Explanation
Fizz&Buzz a variable containing the text Fizz and Buzz
| signals the end of the input
! is a flag to disable implicit printing at EOF
I splits the variable into parts and stores it in consecutive memory slots
= sets top of stack to 0
[ start outer loop
g+bs gets value at slot 3 (starts at zero), increments, appends it to a buffer, saves it to slot 3
%3 takes the current value on stack and pushes the value mod 3 to stack
[0b0b^0] if the value on stack is equal to 0, concatenates value from memory slot 0 ("Fizz") to a buffer and nullifies the 0th element of the buffer
g%5 pushes value from slot 3 to stack, takes the value and pushes the value mod 5 to stack
[0b1b^0] if the value on stack is equal to 0, concatenates the value from memory slot 1 ("Buzz") to the buffer and nullifies the 0th element of the buffer if not null already
B if the buffer is non-empty, prints buffer
]100 end outer loop - repeats 100 times