Can Arduino fulfil my needs?

Looks decent all-around, though two noteworthy things:

1: "if(buttonShredState = HIGH && buttonSafetyState = LOW)" This works flawlessly. It assigns 'HIGH' to buttonShredState and LOW to buttonSafetyState, which makes the && comparison compare HIGH and LOW, which results in false. A double = (==) is the thing you want to use here. Also, it is good practice to contain each comparison in its own set of brackets.

2: lots of comments. Which is good, but most don't say anything. Plenty of things can be geussed from the name of the variable, but the important details aren't mentioned.
For instance:

const int shredTime = 5000 ; //changing the value of this constant varies the duration the motor is on for

shredTime.. the time it takes to shred? Lets have a look at the comment.. the duration the motor is on.. geussed as much. Now.. 5000... seconds? thats over an hour! :o
Try to explain all the criteria the variable works under, and what unit(s) it uses (if any).

And yes, you can make it do multiple things, see the blinkWithoutDelay example on how to avoid delays. You'd probably put what you have in the loop function right now in its own, and turn the delays into delays based on the blinkWithoutDelay example. You could then make a similiar function for the other processes, and simply call each one from loop. The key thought process is, the arduino can only do one thing at a time. So whenever it should be waiting, let it do something else and return to your initial task when the time it should've been waiting is over. The trick is getting it to switch its task :wink:

PS: its nice that you add comments, too few people do this. I just figured I'd give you a little bit of advice to make the habbit even better :wink: