Я не уверен насчет синтаксиса, но это должно помочь, используя свойство count в varStatus, чтобы узнать, на каком номере элемента вы находитесь ...
РЕДАКТИРОВАТЬ: Очевидно, ".count" НЕ индексируется нулем, поэтому правильный код будет:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<c:set var="myListSize" value="${fn:length(myList)}"/>
<c:forEach var="element" items="${myList}" varStatus="stat">
<c:choose>
<c:when test="${ stat.count == 1 }">
<ul>
<li>
<div>${element}</div>
</c:when>
<c:when test="${ stat.count == myListSize }">
<div>${element}</div>
</li>
</ul>
</c:when>
<c:when test="${stat.count % 3 == 0 && stat.count < myListSize }">
<div>${element}</div>
</li>
<br/>
<li>
</c:when>
<c:otherwise>
<div>${element}</div>
</c:otherwise>
</c:choose>
</c:forEach>
Это еще можно улучшить, но пока это работает.