a) All semaphore functionality is built on top of queue functionality, so you can use the queue delete function to delete a semaphore too. Be careful that no tasks hold the semaphore or are blocked on the semaphore before it is deleted though.
b) See the FAQ “why does a queue use that much RAM” http://www.freertos.org/FAQMem.html It is not just the handle, but the entire semaphore.