Can you expand on that? I only have one buffer but would want the user to have the ability to select multiple layers to clip at the same time. Not really sure a union/dissolve would help. I would think it would be some way to change the model using the clip function.
Can I add the clip tool multiple times in the model but make only one of those required?
Look at using the Extract Data Task. It already does what you want (clips multiple layers).
The only thing you want to do is pull that model into your own model where you'll have buffer as the first tool and the output of buffer is passed as the selecting features to the extract data task. (Because the EDT is setup to accept a polygon that a user could draw, thus you're just tweaking the front end experience)
No it wont. The task will only make the output zip file. I just assumed because you were using doing a variable number of input layers to clip that your end goal was to actually extract them for download.
You're going to need to look at using the iterators inside model builder and build the task yourself. However, at this point I'd say a python script might be more straight forward and give you more flexibility. I'm not entirely sure you can setup a model with an iterator to accept multiple layers and iterator over them. (Because your input will probably be featurelayer:multivalue). Thus in a script you'd accept the multivalue, then split the inputs and iterate over them in a loop.
I'll point this out though - GP Services do not like when you have variable numbers of outputs. For example, if your tool accepts 1-5 layers as an input, you could set it up to have 1-5 output featureclasses (after the buffer/clip operation). The problem being, GP Services want well defined scenarios, so if your user only selects 2 layers, but the service expects 5, it doesnt get all the outputs back it was expecting too. So you'll need to come up with a single parameter, passing back a multivalue. (I cant remember off the top of my head if this will work, its been a long time since I've worked with output:multivalue). The take home point here is: you'll have to set your model or script up in a given way to work properly as a gp service and I can't tell you that particular way without knowing your exact requirements.
However, this all could be moot if you're just wanting to return the "clip" results as a map image (instead of the features sent back to the client to be drawn). That is a snap shot of the output to be drawn on top of your map. But at this point I'm making a lot of assumptions on your workflow and end goals. Hopefully some of the thoughts above will allow you to move forward with your workflow.
Although this may not help much to resolve your issues, these are links I found last week when researching the multiple input aspect in a python script (for my Desktop project, not WAB). Good info that might clarify the input part of your question:
http://www.arcgis.com/home/item.html?id=91501d56a92e4534a16054554ac9f6d1 (a script "How to create a MULTIVALUE parameter choice list from an input feature class/table automatically.")
This might give you some other ideas on how to approach it.
Since it seems what you are really trying to do is to create a Web AppBuilder Custom Widgets I just tagged that group. You could also use the "move" option for this thread, which should show in the right column (as long as the thread is open in it's own tab, and not thru you inbox).