UnityのuGUIと同じカメラ内でパーティクルや他のメッシュを重ねたい場合、
Unity2DのSpriteRendererに重ねる場合と同じく、SortingLayerかOrderInLayerで制御可能です。

SortingLayerに対応するシェーダー(Transparent~等)が適用されたRendererがついているGameObjectに、以下のテラシュールブログさんのSortingLayer.csをAddComponentすると、SortingLayerとOrderInLayerの変更が手軽できます。

参考:UnityのSpriteとパーティクルとかモデルの描画順番について 

UI側のSortingLayerとOrderInLayerは親であるCanvasで設定された値になるため、
「奥:UI-パーティクル-UI:手前」と挟んで描画したい場合は手前に表示したいUIを別のCanvasの子にする必要があります。

子のCanvasのOverrideSortingにチェックを入れるとLayerの変更ができます。
※Canvasが増えるとその分ドローコールが増えます。 
uguilayercheck02

重ねてみた出力結果。
uguilayercheck01

SortingLayerは全てDefault
上のボタンのOrderInLayerは1
下のボタンのOrderInLayerは3
青キューブとパーティクルのOrderInLayerは0
赤キューブとパーティクルのOrderInLayerは2
緑キューブとパーティクルのOrderInLayerは4

青は再背面、赤は中間、緑は最前面に描画されています。

また、以下のようにUI階層にキューブやパーティクルを混ぜた場合、
GameObjectにRectTransformをつければアンカーやピボットの設定も適用されました。
uguilayercheck03