Alex, это называется булевы операции над кривыми Безье. Самому сделать довольно трудно. Я знаю парочку библиотек, которые это умеют:
Paper.js (
тут можно позырить пример работы) - это старинная либа, кажись код в ней портировали с Adovbe Illustrator. Мой антивирус ругается при переходе по ссылке потому что у сайта сертификат (https) протух.
g.js (
пример использование булевых операций) - более новая либа, она меньше заточена под рисование на канвасе, а больше под математику.