Aren’t you already calling SQS:SendMessage in a for loop for each item anyway? I’m suggesting you simply replace that with Lambda:Invoke(event). And why do you think you’ll be throttled? The point is to be a work queue without any of the hassle.
Won’t the DLQ story be the same in both scenarios? Not sure that has bearing one which method is used.
The behavior of Async Lambda functions are not well-specified, so I think it would be interesting to try your workload doing that and seeing what happens.