Ended up doing the processing server-side to keep the heavy lifting there. The IDs are automatically generated through the EditTemplate the first time. Whenever I need to add / remove from the list, I pass the serialized form to the server in an AJAX call. The server then makes the request change and passes back rendered HTML of the list which can be swapped in and out client-side using jquery.
Could have used client-side binding to solve this problem, but C# on the server is more testable and compile safe at the moment. Unfortunately, the cost is round trips to the server and back to update the list.