Assume is circumstantial, let is not.
$\bullet$ We use assume to investigate the implications of a certain assumption, given a certain context. For instance, say we want to prove that $A$ is true , but $A$ requires that we consider two cases, $a$ and $a'$. Then we can assume $a$ is true, observe that it implies $A$, then assume $a'$ is true, and observe that it implies $A$ as well. Thus we have shown $A$ is true, by assuming all possible cases. Another word we can use is suppose. The idea is that you are considering a possibility, whether it leads to something true or not.
Note that this depends entirely on the problem, hence why I use the word circumstancial: for instance, you cannot assume $f(x)=\ln x$ if neither $f$ nor $\ln x$ appear in the problem.
$\bullet$ We use let when we wish to introduce a tool which will enable us to solve the problem. It is permanent throughout the proof, and is more of a commodity. For instance, if we want to prove $A$ is true, and need to use a certain mathematical object to do so, then it is useful to let: "something" be "said object". Another word for this is $set$.
This is not circumstantial, in the sense that one could $let:$ "something" be "said object" under any circumstance, hypothetically. For example, one can let $f(x)=\ln x$ no matter what the context of the problem is.
We want to hike to the top of a mountain via the quickest route. There are exactly four possible routes. We may let these routes be $a,b,c,d$ so that we may refer to them later in the solution. Next, to solve the problem, we may assume that we take $a$, observe that it would take a certain time, then assume that we take $b$, etc. and conclude.