Hi Allen, though you can use python to do this, based on what I'm reading, it might not be necessary. You should be able to create this scenario in Modelbuilder. You would add the buffer tool to your model, and then create a new "Feature Set" variable to the model and set. The Feature Set variable type is an interactive, user-input type.
Then set this new parameter as the "Input Features" parameter.
So we've established this "Feature Set" parameter as our input geography parameter for the buffer tool. Now we'll want to tell the Feature Set parameter what kind of geography to allow. Right-click on the feature set parameter > Properties, and import the schema and symbology from another layer or feature class. This is handy. This allows you to control what the symbol looks like as the user drops it, and it also allows you to control what kind of geography they input: points, lines, or polygons.
More than likely, I imagine you'll want to allow the user to adjust the size of the buffer rather than hardcoding it. You can make that a variable in this model by right-clicking the buffer tool > make variable > from parameter > Distance.
Now we want to make sure that both of these new parameters are flagged for requiring user input. Right-both of them and make them model parameters.
For sake of argument, go ahead and set the output of the buffer tool to something like in_memory\out_buffer. Now save this model in a toolbox. Once it's saved, double-click on it to launch it like a tool. You'll now have a tool that allows you to manually drop an input point, specify a buffer size, and it'll create that buffer.
Now from here, you would publish this as a geoprocessing service and hook it up in the Web AppBuilder with the Geoprocessing widget. You'll be able to experience the same interactivity there.